多重繼承、鑽石繼承、虛繼承
1、多重繼承
在c++中子類可以有多個父類,按照繼承表的順序繼承父類中的所有成員,並按照繼承表呼叫父類的建構函式。
在子類中按照繼承順序排列父類,並且會標記每個父類的位置。
當父類的指標或引用指向子類物件時,編譯器會自動計算出父類在子類中的位置。
2、鑽石繼承
假如乙個子類繼承了多個父類,而這多個父類有乙個共同的父類,爺爺類中的成員會在孫子類中存在多份,這種繼承叫鑽石繼承。
這種繼承並不會產生錯誤,孫子類訪問祖先的成員時必須使用 父類名::成員名,重點是這種繼承方式會造成冗餘浪費記憶體。
注意:在建立孫子類時會多次呼叫祖先類的建構函式,銷毀函式類時也會多次呼叫祖先類的析構函式。
3、虛繼承 virtual
在進行鑽石結構繼承時,如果父類繼承祖先類時使用了virtual關鍵字,那麼在孫子類中只保留乙份祖先類的成員,也只會呼叫一次祖先類的析構、析構、拷貝函式。
注意:使用虛繼承時子類中會多乙個指標指向從父類中繼承的成員。
C 鑽石繼承與虛繼承
首先,何為鑽石繼承,顧名思義,在類的繼承過程中,繼承結構是乙個類似菱形 鑽石 的結構就屬於鑽石繼承,如下 這是乙個最簡單的鑽石繼承。實際上,在複雜的繼承表中,只要子類按不同的繼承路徑回溯到基類有菱形結構,均屬鑽石繼承。下面先看乙個例子,鑽石繼承在c 程式設計中帶來的問題。1 2 include3 u...
c 多重繼承和虛繼承
多重繼承 多重繼承是指從多個直接基類中產生派生類的能力。多重繼承的派生類繼承了所有父類的屬性。struct base1 struct base2 struct d1 public base1,public base2 d1 default 虛繼承 虛繼承的目的是令某個類做出宣告,承諾願意共享它的基類...
C 多重繼承 虛繼承
c 中的多繼承,建構函式處理並沒有問題,物件構造的時候按照繼承中宣告的順序呼叫多個父類的建構函式,析構函式同樣遵守單繼承中的原則。二意性問題 如果多基類中存在同名成員,會產生二意性的問題 比如,root1類中宣告doany 介面,root2類中也宣告了doany 介面,child多承繼root1和r...