C 筆記 C 中的虛擬繼承的作用及實現原理

2021-08-18 05:02:45 字數 714 閱讀 1992

虛繼承是解決

c++多重繼承問題的一種手段,從不同途徑繼承來的同一基類,會在子類中存在多份拷貝。這將存在兩個問題:其一,浪費儲存空間;第二,存在二義性問題,通常可以將派生類物件的位址賦值給基類物件,實現的具體方式是,將基類指標指向繼承類(繼承類有基類的拷貝)中的基類物件的位址,但是多重繼承可能存在乙個基類的多份拷貝,這就出現了二義性。

其實虛擬繼承和虛函式是完全沒關係的,比如

b繼承自

a,c繼承自a,

d繼承自b和

c,這個時候當我們呼叫d中

a部分的函式的時候就會出現二義性的問題,並且由於

d中有兩份

a的拷貝,這樣非常的浪費儲存空間

#include

using namespace std;

class  _base

};class mid1: virtual public   _base    ;

class mid2: virtual public   _base;

class child: public mid1, public  mid2;

int main()

像這樣寫就沒有問題了,這裡將

_base

類設為了虛基類,

child

類裡面只有乙份

_base

類的拷貝,因此

a.print();

這樣的輸出不會存在二義性的問題

C 中的虛擬繼承

1.為什麼要引入虛擬繼承 虛擬繼承是多重繼承中特有的概念。虛擬基類是為解決多重繼承而出現的。如 類d繼承自類b1 b2,而類b1 b2都繼承自類a,因此在類d中兩次出現類a中的變數和函式。為了節省記憶體空間,可以將b1 b2對a的繼承定義為虛擬繼承,而a就成了虛擬基類。實現的 如下 class a ...

C 中虛繼承的作用

2010 09 30 15 58 01 分類 c c 程式設計基礎 舉報 字型大小訂閱 我的 書 c 虛繼承可以防止多重繼承產生的二義性問題。虛繼承,就是在被繼承的類前面加上virtual關鍵字,這時被繼承的類稱為虛基類,如下面 中的base類。虛繼承在多重繼承的時可以防止二義性。class bas...

C 中虛繼承的作用

c 虛繼承可以防止多重繼承產生的二義性問題。虛繼承,就是在被繼承的類前面加上virtual關鍵字,這時被繼承的類稱為虛基類,如下面 中的base類。虛繼承在多重繼承的時可以防止二義性。class base class derived1 virutal public base class derive...