派生類直接派生於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...