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 }  
    虚函数

      虚函数表继承替换原则:

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

  • 相关阅读:
    基于硬件的毕业设计论文的书写
    C语言程序设计课程总结
    嵌入式程序设计第三周成绩汇总
    C第十八次课
    2016-4班平时成绩第9周排名和汇总
    2016-3班平时成绩第9周汇总和排名
    第十七次课大纲
    第十六次课大纲
    2020-02-28
    2020-02-27
  • 原文地址:https://www.cnblogs.com/sanghai/p/6524978.html
Copyright © 2011-2022 走看看