C 多繼承產生的二義性以及虛繼承解決辦法

2021-09-11 21:39:35 字數 518 閱讀 3763

#include using namespace std;

class b

;class b1 : public b

;class b2 : public b

;class c : public b1,public b2

;int main()

c1物件不能訪問變數b,這就是多繼承中的二義性

解決方法:新增virtual關鍵字(虛繼承)。

#include using namespace std;

class b

;class b1 : virtual public b

;class b2 : virtual public b

;class c : public b1,public b2

;int main()

但是如果沒有b類只有b1、b2,那麼virtual將不再起作用,所以多繼承始終會出現問題,所以不建議使用多繼承

C 繼承 二義性 虛繼承

繼承 子類擁有父類所有的成員變數和函式 子類是一種特殊的父類 子類可以當做父類的物件使用 子類可以擁有父類沒有的方法和屬性。class parent class child public parent int main 繼承的訪問控制 c 中的繼承方式會影響子類對外訪問屬性 1 看呼叫語句,是在類的...

C 多繼承的二義性

單繼承 派生類只從乙個基類派生 多繼承 派生類從多個基類派生 多重派生 有乙個基類派生出多個不同的派生類 多層派生 派生類又作為基類,繼續派生出新的類 多繼承可以看作是單繼承的擴充套件。所謂多繼承是指派生類具有多個基類,派生類與每個基類之間的關係仍可看作是乙個單繼承。多繼承下派生類的定義格式如下 c...

C 多繼承的二義性

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