多重繼承(菱形繼承)

2021-08-08 16:38:41 字數 707 閱讀 2176

多重繼承:    經典的是菱形繼承,如圖。

菱形繼承將會產生的問題:

把基類a中的成員變數通過b和c兩次繼承至d。

d的繼承結構:

可以看到,ma被繼承兩次至d;

那麼將如何解決這個問題呢?

採用虛繼承的方法,將基類a中的ma直接繼承至d。

**如下:

class a

int ma;

};class b:virtual public a

int mb;

};class c:virtual public a

int mc;

};class d:public b,public c

int md;

};

採用虛繼承方法所例項化出來的物件會有其基類的虛基類指標,指向基類所產生的虛基類表。對其物件求sizeof會多出虛基類指標的大小。

會將a類中成員變數直接繼承至d,解決多次繼承問題。

c 多重繼承 虛繼承 菱形繼承

多重繼承的特性和使用和單繼承沒區別。按照單繼承來使用即可。多重繼承可能會引入乙個 菱形繼承的問題 這個問題其實並不算問題,因為它合情合理,即多個基類 擁有乙個共同的基類,那麼在構造的時候,由於構造的遞迴特性,就會出現共同基類出現兩份例項的 情況,而且如果針對性修改,那麼如果不在訪問共同基類的時候先指...

多重繼承與菱形缺陷

多重繼承是 c 語言獨有的繼承方式,其它幾乎所有語言都秉承了單一繼承的思想。這是因為多重繼承致命的缺陷導致的。當繼承基類時,在派生類中就獲得了基類所有的資料成員副本。假如類b從 a1和a2兩個類多重繼承而來,這樣 b類就包含a1 a2類的資料成員副本。考慮如果a1 a2都從某基類派生,該基類稱為 b...

菱形繼承 菱形虛擬繼承

菱形繼承 鑽石繼承 模型 拿如下 舉例 class person class student public person class teacher public person class graduate public student,public teacher void test 當派生類gr...