运行环境是vs2015 release x86
(1)普通继承共享虚函数指针,A中已经为void aa()分配了指针,B中不再增加虚函数的指针,共用A的
//普通继承共享虚函数指针,任何c++编译器都满足这条规则
//该编译器,虚函数指针为4字节
class A
{
char a[2];
public:
virtual void aa() {};
};//2+4补齐到-------8
class B :public A
{
char b[2];
char a[2];
public:
//virtual void bb() {};
virtual void aa() {};
};//8(副本)+4=12
class C :public B
{
char a[2];
char b[2];
char c[2];
public:
//virtual void cc() {};
virtual void aa() {};
//virtual void bb() {};
};//12(副本)+6补齐到---------20
int main()
{
cout <<"sizeof(A)="<< sizeof(A) << endl << "sizeof(B)=" << sizeof(B) << endl << "sizeof(C)=" << sizeof(C);
return 0;
}
输出:8,12,20
(2)虚继承不共享虚函数指针
class A
{
char a[2];
public:
virtual void aa() {};
};//8
class B :public virtual A
{
char b[2];
char a[2];
public:
virtual void aa() {};
};//16
class C :public virtual B
{
char a[2];
char b[2];
char c[2];
public:
virtual void aa() {};
};//28
输出:8,16,28