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時,會發生切片,也是這樣設計的;
?進行切片賦值的時候,他會自動偏移到自己對應的那個位置;
?