虛基類是抽象類嗎 設(shè)置虛基類的目的?
設(shè)置虛基類的目的?其目的是消除歧義。當(dāng)多個繼承路徑上存在公共基類時,在多個路徑的匯合處,公共基類將生成多個實例(或多個副本)。如果只想保存基類的一個實例,可以將公共基類描述為虛擬基類。虛擬基類的基本原
設(shè)置虛基類的目的?
其目的是消除歧義。
當(dāng)多個繼承路徑上存在公共基類時,在多個路徑的匯合處,公共基類將生成多個實例(或多個副本)。如果只想保存基類的一個實例,可以將公共基類描述為虛擬基類。
虛擬基類的基本原則是在內(nèi)存中只有其成員的一個副本。這樣,通過將基類繼承聲明為虛繼承,只能繼承基類的一個副本,從而消除了歧義。使用虛擬限定符將基類繼承描述為虛擬的。
什么叫做虛基類?
什么叫做虛基類?
,也就是說,編譯器不能確定您是否在D中。在f()中調(diào)用哪個函數(shù)f。這可能會讓人覺得有點奇怪。命名只定義了一個CA::F。因為每個人都從CA派生,所以它自然地被稱為CA::F。為什么我們不能確定呢?
這是因為編譯器在編譯時需要確定子類的函數(shù)定義。例如,確定CA::F。然后,在編譯CB和CC時,它還需要在編譯器的語法樹中生成CB::F、CC::F和其他標識符。然后,在編譯CD時,由于CB和CC有一個函數(shù)f,編譯器將嘗試生成這兩個CD::f標識符。很明顯,此時會報告錯誤,為時已晚。
(當(dāng)我們不使用CD::F時,不會生成上述任何標記,因此如果我們刪除D.
要解決此問題,有兩種方法:
1。重載函數(shù)f():此時由于我們已經(jīng)明確定義了CD::f,編譯器在檢查CD::f()調(diào)用時不需要一步一步生成CD::f label;
此時CD的元素結(jié)構(gòu)如下:| CB(CA)|
]| CC(CA)|
,所以sizeof(CD)=8(CB和CC各有一個元素K)
2。使用虛擬繼承:虛擬繼承也稱為共享繼承。這種共享實際上是在編譯過程中實現(xiàn)的。當(dāng)使用虛擬繼承時,上述程序?qū)⒆兂梢韵滦问剑侯恈a。