多重繼承引起的二義性問題

2021-06-06 19:21:28 字數 495 閱讀 5570

派生類直接派生於a,b兩基類,a,b兩個又都有成員display或者都有成員int p。這個時候要是派生類c呼叫display,則出錯,原因是系統不知道改掉用哪乙個display。此時這樣寫:c c1; c1.a::display();

若是在c的成員函式中呼叫display則要這樣寫a::display();

如果a,b都是由n派生而來。則a,b都繼承了n的成員,則a,b具有同名的成員。但是這兩個同名的成員不同。因為他們分別屬於不同的派生類,可以具有不同的值。要訪問也是要加上網域名稱限制。

這裡有乙個問題是關於虛基類和抽象類的區別

虛基類是為了解決上邊多重繼承的問題而提出的一種繼承方式。即在a,b繼承n時宣告為virtual型繼承

例如:class a:virtual public n{};

class b:virtual public n{};

class c:public a,public b

//注意這裡也要寫上最上邊的基類n。

};

繼承中的二義性問題

一 呼叫不同基類的同名成員時可能出現二義性 class a class b class c public a,public b 在執行obj.get 時將是有二義性的。因為類c分別從類a類b繼承了兩個不同版本的get 成員函式,因此,obj.get 到底呼叫哪個get 版本,編譯器將無從知曉。對於這...

C 多層繼承二義性問題

多繼承可以看作是單繼承的擴充套件。所謂多繼承是指派生類具有多個基類,派生類與每個基類之間的關係仍可看作是乙個單繼承。多繼承下派生類的定義格式如下 class 派生類名 繼承方式1 基類名1 繼承方式2 基類名2 其中,繼承方式1 繼承方式2 是三種繼承方式 public private protec...

C 多層繼承二義性問題

多繼承可以看作是單繼承的擴充套件。所謂多繼承是指派生類具有多個基類,派生類與每個基類之間的關係仍可看作是乙個單繼承。多繼承下派生類的定義格式如下 class 派生類名 繼承方式1 基類名1 繼承方式2 基類名2 其中,繼承方式1 繼承方式2 是三種繼承方式 public private protec...