多重继承 内存布局
1 继承的基类(带虚表的)有几个,派生类就有几张虚表
2 内存布局按照继承顺序
3 派生类新增的虚函数在第一个虚表里
class Base0
{
public:
int a0;
};
class Base1:public Base0
{
public:
int a1;
virtual void f1(){ }
};
class Base2
{
public:
int a2;
virtual void f2(){}
};
class Base3: public Base1, public Base2
{
public:
int a3;
virtual void f1(){ } // base1的虚表
virtual void f2(){ } // base2的虚表
virtual void f3(){ } // base3的虚表
};
void C_40Dlg::OnBnClickedButton3()
{
Base3* pBase3 = new Base3;
int BaseSize3 = sizeof(Base3); // 24/4=6 4个成员变量 2个虚表
pBase3->a0 = 0x11111111;
pBase3->a1 = 0x22222222;
pBase3->a2 = 0x33333333;
pBase3->a3 = 0x44444444;
pBase3->f1(); // 这是Base1虚函数
pBase3->f2(); // 这是Base2虚函数
pBase3->f3(); // 这是Base3虚函数
}