C 虛基類的作用

2021-05-02 09:35:06 字數 835 閱讀 3645

虛基類的作用

當乙個基類被宣告為虛基類後,即使它成為了多繼承鏈路上的公共基類,最後的派生類中也只有它的乙個備份。例如:

class cbase ;

class cderive1:virtual public cbase;

class cderive2:virtual public cbase;

class cderive12:public cderive1,cderive2;

則在類cderive12的物件中,僅有類cbase的乙個物件資料

虛基類的特點:

虛基類建構函式的引數必須由最新派生出來的類負責初始化(即使不是直接繼承);

虛基類的建構函式先於非虛基類的建構函式執行。

重寫「c++學習筆記(9)——使用範圍運算子解決繼承中的二義性問題 」中的程式,觀察虛基類的作用

**如下:

1. 子派生類物件的值:

從上例可以看出,在類cderived12的建構函式初始化表中,呼叫了間接基類cbase的建構函式,這對於非虛基類是非法的,但對於虛基類則是合法且必要的。

對於派生類cderived1和cderived2,不論是其內部實現,還是例項化的物件,基類cbase是否是它們的虛基類是沒有影響的。受到影響的是它們的派生類cderived12,因為它從兩條路徑都能到達cbase。

2. 執行結果:

由此可知,其公共基類的建構函式只呼叫了一次,並且優先於非基類的構造函式呼叫;並且發現,子派生類的物件obj的成員變數的值只有乙個,所以,當公共基類cbase被宣告為虛基類後,雖然它成為cderive1和cderive2的公共基類,但子派生類cderive12中也只有它的乙個備份。可以仔細比較與例2的執行結果有什麼不同。

虛基類的作用

1 當在多條繼承路徑上有乙個公共的基類,在這些路徑的某幾條匯合處,這個公共的基類就會產生多個例項 或多個副本 若只想儲存這個基類的乙個例項,可以將這個公共基類說明為虛基類 class cbase class childa1 virtual public cbase class childa2 vir...

C 中虛基類的作用

父類 class cparent 繼承類的宣告比較特別 中virtual的作用是 說明這個cparent是cchild 的虛基類 class cchild virtual public cparent 虛基類是指 class subclass virtual public baseclass 中以v...

C 的虛基類

虛基類 當在多條繼承路徑上有乙個公共的基類,在這些路徑中的某幾條匯合處,這個公共的基類就會產生多個例項 或多個副本 若只想儲存這個基類的乙個例項,可以將這個公共基類說明為 虛基類 虛基類.在繼承中產生歧義的原因有可能基類是繼承類繼承了基類多次,從而產生了多個拷貝,即不止一次的通過多個路徑繼承類在記憶...