【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
一般用于多继承中,
比如,存在基类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