在学习C++的多态实现时,曾经有这样的疑问: 假设派生类继承了多个基类,基类里都有虚函数, 也就是说派生类继承了多个虚表, 那派生类他自己的虚函数放在哪个虚表中呢?
在论坛里请教了各位大牛后,这个问题很快的解决了,我们通过代码来测试:
class A
{
public:
virtual void a1(void){ cout<<"a1"<<endl; }
virtual void a2(void){ cout<<"a2"<<endl; }
};
class B
{
public:
virtual void b1(void){ cout<<"b1"<<endl; }
virtual void b2(void){ cout<<"b2"<<endl; }
};
class C : public A,B
{
public:
virtual void c1(void){ cout<<"c1"<<endl; }
virtual void c2(void){ cout<<"c2"<<endl; }
};
{
public:
virtual void a1(void){ cout<<"a1"<<endl; }
virtual void a2(void){ cout<<"a2"<<endl; }
};
class B
{
public:
virtual void b1(void){ cout<<"b1"<<endl; }
virtual void b2(void){ cout<<"b2"<<endl; }
};
class C : public A,B
{
public:
virtual void c1(void){ cout<<"c1"<<endl; }
virtual void c2(void){ cout<<"c2"<<endl; }
};
经测试,那么派生类C的虚表有两个,分别排列如下
虚表1:父类A虚表 + 派生类C自身虚表
虚表2:父类B虚表
如果是class C : public B,A
那么情况就变成
虚表1:父类B虚表 + 派生类C自 身虚表
虚表2:父类A虚表
最后我们得到结论: 派生类自己的虚表是放在第一个父类的虚表后面的.
转载于:https://blog.51cto.com/huangnet/717062