c++具有多继承的特性,那么菱形继承就是多继承的一种特殊情况,但是菱形继承会出现一些问题,比如数据冗余和二义性;
那么怎么解决这个问题呢?
菱形虚拟继承
菱形虚拟继承的原理
class A
{
public:
int _a;
};
class B: virtual public A
{
public:
int _b;
};
class C :virtual public A
{
public:
int _c;
};
class D :public B, public C
{
public:
int _d;
};
int main()
{
D d;
d.B::_a = 1;
d.C::_a = 2;
d._b = 3;
d._c = 4;
d._d = 5;
return 0;
}
我们分析下这段代码,由于菱形虚拟继承,所以只有一个A对象被继承了,放在存放在最下面,方便查找,这样设计就解决了数据冗余和二义性的问题,但是比较复杂,
当我们用派生类赋值给B或者C时,会发生切片,也是这样设计的;
进行切片赋值的时候,他会自动偏移到自己对应的那个位置;