zoukankan      html  css  js  c++  java
  • C++ 虚函数

     1 using namespace std;
     2 #include <iostream>
     3 
     4 using namespace std;
     5 
     6 class A{                                                                                                                                                                                        
     7 public:
     8     virtual void Fun1(){
     9         cout << "A::Func1" << endl;
    10     }   
    11 
    12     virtual void Fun2(){
    13         cout << "A::Func2" << endl;
    14     }   
    15 };
    16 
    17 class B : public A{
    18 public:
    19     virtual void Fun1(){
    20         cout << "B::Func1" << endl;
    21     }   
    22 
    23     virtual void Fun3(){
    24         cout << "B::Func3" << endl;
    25     }   
    26 };
    27 
    28 class C : public B{
    29 public:
    30     virtual void Fun1(){
    31         cout << "C::Func1" << endl;
    32     }   
    33 
    34     virtual void Fun4(){
    35         cout << "C::Func4" << endl;
    36     }   
    37 };
    38 
    39 typedef void(*FUNC)();
    40 int main()
    41 {
    42     A a;
    43     cout << "A::虚表" << endl << endl;
    44     ((FUNC)(*(long*)(*(long*)(&a))))();
    45     ((FUNC)(*((long*)(*(long*)(&a)) + 1)))();
    46     cout << "------------------------" << endl;
    47 
    48     B b;
    49     cout << "B::虚表" << endl << endl;
    50     ((FUNC)(*(long*)(*(long*)(&b))))();
    51     ((FUNC)(*((long*)(*(long*)(&b)) + 1)))();
    52     ((FUNC)(*((long*)(*(long*)(&b)) + 2)))();
    53     cout << "------------------------" << endl;
    54 
    55     C c;
    56     cout << "C::虚表" << endl << endl;
    57     ((FUNC)(*(long*)(*(long*)(&c))))();
    58     ((FUNC)(*((long*)(*(long*)(&c)) + 1)))();
    59     ((FUNC)(*((long*)(*(long*)(&c)) + 2)))();
    60     ((FUNC)(*((long*)(*(long*)(&c)) + 3)))();
    61     cout << "------------------------" << endl;
    62     return 0;
    63 }  
    虚函数

      虚函数表继承替换原则:

    有则替换, 无则末尾追加。

  • 相关阅读:
    地铁开发进度1
    人月神话阅读笔记二
    学习进度五
    人月神话阅读笔记一
    WebView的用法:
    图框联动
    阅读笔记《人月神话》一
    5
    4
    3
  • 原文地址:https://www.cnblogs.com/sanghai/p/6524978.html
Copyright © 2011-2022 走看看