虛繼承是解決
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...