虛基類的作用是什么 什么叫做虛基類?
什么叫做虛基類?什么叫做虛基類?,也就是說,編譯器不能確定您是否在D中。在f()中調(diào)用哪個函數(shù)f。這可能會讓人覺得有點奇怪。命名只定義了一個CA::F。因為每個人都從CA派生,所以它自然地被稱為CA:
什么叫做虛基類?
什么叫做虛基類?
,也就是說,編譯器不能確定您是否在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標識符。很明顯,此時會報告錯誤,為時已晚。
(當我們不使用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)的。當使用虛擬繼承時,上面的程序?qū)⒆兂扇缦滦问剑篶lass ca.
虛基類的作用是什么?
語法中有抽象類和虛擬基類,這并不意味著你必須使用它們。我通常不使用花哨的東西。
我可以考慮使用抽象類,也許可以利用這個優(yōu)勢:
具有純虛擬函數(shù)的類是抽象類。這個函數(shù)實際上并沒有在基類中使用,它只是通知編譯器:
在這里聲明一個虛擬函數(shù),讓它在派生類中定義。為類族提供公共接口。
例如,要計算平面形狀的面積,在抽象類基類中,virtualfloatarea()const=0
派生類三角形和派生類圓定義了面積()的具體計算。一旦我們有了一個派生的三角形或圓,我們就可以使用相同的函數(shù)名。Area()計算面積。
虛擬基類的構(gòu)造應在派生類中完成,并且應在派生類本身的構(gòu)造之前完成。當存在派生類1、派生類2和生成的派生類12時,派生類12只執(zhí)行一次虛擬基類的構(gòu)造。虛擬基類只有一個對象。至于它的特殊用途,我沒想到。
創(chuàng)建子類對象時,子類和父類的構(gòu)造函數(shù)執(zhí)行順序是什么?
繼承時,構(gòu)造函數(shù)的調(diào)用順序為:1。如果繼承虛擬基類,則首先調(diào)用虛擬基類的構(gòu)造函數(shù)。如果有多個虛擬基類,請按順序調(diào)用它們。
2. 如果基類是繼承的,則調(diào)用基類的構(gòu)造函數(shù);如果有多個基類,則按順序調(diào)用它們。三。如果類中定義了成員對象,則調(diào)用成員對象的構(gòu)造函數(shù);如果有多個成員對象,則按成員對象定義的順序調(diào)用;4。調(diào)用自己的構(gòu)造函數(shù);析構(gòu)函數(shù)的調(diào)用順序相反。