C++类的继承关系——多继承(未重写虚函数)

来源:互联网 发布:金庸影响力知乎 编辑:程序博客网 时间:2024/05/08 10:21
   首先,在介绍有虚函数的多继承(未重写虚函数),先介绍一下以下概念。

       多态:多种形态,简单地说父类的指针或引用调用重写的虚函数,当父类的指针或引用指向父类对象调用的就是父类的虚函数,指向子类对象时调用的就是是子类的虚函数

       虚函数:C++中虚函数的主要作用就是实现多态, 在一个类的成员函数前面加上virtual关键字,该函数就被定义成虚函数,虚函数的地址存放在虚表(存放虚函数地址的表,虚表的地址存放在所定义对象中)

       那么,当一个子类有多个父类,子类的虚表会放在什么位置?

       请看下例:

class Base{public:virtual void FunTest1(){cout << "Base::FunTest1()" << endl;}virtual void FunTest2(){cout << "Base::FunTest2()" << endl;}int _data1;};class Base1{public:virtual void FunTest3(){cout << "Base1::FunTest3()" << endl;}virtual void FunTest4(){cout << "Base1::FunTest4()" << endl;}int _data2;};class Derive :public Base, public Base1{public:virtual void FunTest5(){cout << "Derive::FunTest5()" << endl;}int _data3;};typedef void(*VtbFun)();void PrintVtable(){Derive d1;d1._data1 = 0x01;d1._data2 = 0x02;int* pVTable = (int *)*(int*)&d1;VtbFun FunTest = (VtbFun)*pVTable;while (NULL != FunTest){FunTest();cout << (int*)FunTest << endl;pVTable += 1;FunTest = (VtbFun)*pVTable;}}int main(){Derive d;d._data1 = 0x01;d._data2 = 0x02;d._data3 = 0x03;PrintVtable();return 0;}


 

 

0 0
原创粉丝点击