(1):當在多條繼承路徑上有乙個公共的基類,在這些路徑的某幾條匯合處,這個公共的基類就會產生多個例項(或多個副本),若只想儲存這個基類的乙個例項,可以將這個公共基類說明為虛基類、
class cbase ;
class childa1:virtual public cbase;
class childa2:virtual public cbase;
class childb:public childa1,childa2;
則在類childb的物件中,僅有類cbase的乙個物件資料
虛基類的特點:
(1):虛基類建構函式的引數必須由最新派生出來的類負責初始化(即使不是直接繼承).
(2)虛基類的建構函式先於非虛基類的建構函式執行。
下面看一段程式的輸出結果:
1 #include "程式輸出的結果:stdafx.h
"2 #include3
using
namespace
std;45
class
cbase
14 ~cbase()
1518
};19
20class childa1: virtual
public
cbase
2127 ~childa1()
2831
intgeta()
3235
};36
37class childa2 : virtual
public
cbase
3844 ~childa2()
4548
intgeta()
4952
};53
54class childb:public childa1,public
childa2
5561 ~childb()
6265
};66
67int
main()
68
從上例中可以看出來,在類childb的建構函式初始列表中,呼叫了間接基類cbase的建構函式,這對於非基類是非法的,但對於虛基類則是合法而且是必要的。
從輸出的結果可以看出來,其公共基類的建構函式只呼叫了一次,並且優先於非虛基類的構造函式呼叫,並且發現,子派生類的物件childb的成員變數的值只有乙個,所以當公共基類cbase被宣告為虛基類,雖然它成為childa1和childa2的公共基類,但子派生類childb中也只有它的乙個備份.
C 虛基類的作用
虛基類的作用 當乙個基類被宣告為虛基類後,即使它成為了多繼承鏈路上的公共基類,最後的派生類中也只有它的乙個備份。例如 class cbase class cderive1 virtual public cbase class cderive2 virtual public cbase class c...
C 中虛基類的作用
父類 class cparent 繼承類的宣告比較特別 中virtual的作用是 說明這個cparent是cchild 的虛基類 class cchild virtual public cparent 虛基類是指 class subclass virtual public baseclass 中以v...
虛基類的作用 使用及抽象基類虛析構函式問題
1 虛基類 虛基類解決的問題 當存在基類a,類b與c派生自a,類d派生自類b與c時,類d中存在兩個類a物件導致二義性問題。二義性問題還有如 物件d不知道呼叫哪個類b或類c中均存在的func 方法。如何使用虛基類 h class a class b public virtual a 此時類a稱為類b的...