C 多重繼承與虛繼承

2021-08-25 08:30:11 字數 755 閱讀 8159

在派生類中對基類成員的訪問應該是唯一的。但是,在多繼承情況下,可能造成對基類中某個成員的訪問出現了不一致的情況,這時就稱對基類成員的訪問產生了二義性。

派生類在訪問基類成員函式時,由於基類存在同名的成員函式,導致無法確定訪問的是哪個基類的成員函式,因此出現了二義性錯誤。

例如:

#includeusing namespace std;		

class base1 ;

class derived11:public base{};

class derived12:public base{};

class derived2:public derived11,public derived12 {};

int main()

1,作用域運算子

obj.derived11::a,指明訪問哪乙個基類的data.但是由於派生類的直接基類有乙個共同的基類,所以 obj.base::a是錯誤的。

2,使用虛基類

產生二義性的最主要的原因就是base在派生類derived2中產生了2個物件,從而導致了對基類base的成員data訪問的不一致性。要解決這個問題,只需使這個公共基類base在派生類中只產生乙個子物件即可。

雖然在形式上,derived2繼承derived11,derived12,但是在儲存結構上,對data的訪問是指向base的。

C 多重繼承 虛繼承

c 中的多繼承,建構函式處理並沒有問題,物件構造的時候按照繼承中宣告的順序呼叫多個父類的建構函式,析構函式同樣遵守單繼承中的原則。二意性問題 如果多基類中存在同名成員,會產生二意性的問題 比如,root1類中宣告doany 介面,root2類中也宣告了doany 介面,child多承繼root1和r...

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

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

c 多重繼承和虛繼承

多重繼承 多重繼承是指從多個直接基類中產生派生類的能力。多重繼承的派生類繼承了所有父類的屬性。struct base1 struct base2 struct d1 public base1,public base2 d1 default 虛繼承 虛繼承的目的是令某個類做出宣告,承諾願意共享它的基類...