一般用于多继承中,
比如,存在基类B:
class B{
public : int a; public: B() { CCLOG("construc b------------"); } };派生类D1和D2:
class D1:public B{
public : D1() { CCLOG("construc d1------------"); } };class D2:public B{
public : D2() { CCLOG("construc d2------------"); } };class C:public D1,public D2
{ public : C() { CCLOG("construc c------------"); }};
那么C拥有2个a,分别来自D1和D2。
C c;
c.a;//报错
c.D1::a;//ok
int _size = sizeof(C);//_size == 8
构造顺序为 b->d1->b->d2->c
但如果 D1,D2使用virtual继承
class D1:virtual public B{};
class D2:virtual public B{};
那么C只会有一个a
c.a;//ok
int _size = sizeof(C);//_size == 12
构造顺序为 b->d1->d2->c