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时,会发生切片,也是这样设计的;
进行切片赋值的时候,他会自动偏移到自己对应的那个位置;