在c++对象模型中,如果子类虚继承父类,内存布局会有4中情况。以下所有结果均是在vs2012+win764位系统下面运行出来的结果。
1.子类父类都没有虚函数。
class Base
{
public:
int count;
int ibase;
public:
Base(int k,int p):count(k),ibase(p){}
//virtual void getIbase(){cout << "ibase " << endl;}
//virtual void print(){cout << "ibase print" << endl;}
~Base(){}
};
class Derive: virtual public Base
{
public:
int iderived_virtual;
Derive(int id):iderived_virtual(id),Base(1,3){}
~Derive(){}
void print(){cout << "iderive print" << endl;}
//virtual void print_inherit(){cout << "inherient print" << endl;}
};
此时,内存布局如下:
3.父类和子类都有虚函数,但是子类虚函数没有重写父类的虚函数,内存布局如下。
4.父类和子类都有虚函数,并且子类有重写父类的虚函数,内存布局如下: