虛基類的作用
當乙個基類被宣告為虛基類後,即使它成為了多繼承鏈路上的公共基類,最後的派生類中也只有它的乙個備份。例如:
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 的虛基類
虛基類 當在多條繼承路徑上有乙個公共的基類,在這些路徑中的某幾條匯合處,這個公共的基類就會產生多個例項 或多個副本 若只想儲存這個基類的乙個例項,可以將這個公共基類說明為 虛基類 虛基類.在繼承中產生歧義的原因有可能基類是繼承類繼承了基類多次,從而產生了多個拷貝,即不止一次的通過多個路徑繼承類在記憶...