c 虛繼承有什麼缺點,C 中虛繼承和一般的繼承有什麼不同

2021-04-17 12:55:45 字數 1527 閱讀 1584

1樓:匿名使用者

不能抄說是缺點,只能說是特點。 b、c虛繼承a的話,那麼任何繼承b、c的類都得指定如何構造其中包含的a。

如果不是繼承,那麼類b、c分別各自指明如何構造其中包含的a,繼承b、c的類無需再指明也不能指明如何構造其中包含的a。

2樓:匿名使用者

虛繼承的話,虛基類必須由每個最後派生的類初始化

普通繼承的話,基類由這個基類直接派生的類初始化即可

c++中虛繼承和一般的繼承有什麼不同

3樓:隨意之歌

虛繼承不管父類派生出多少個子類在記憶體總只存在一套資料,但是一般繼承會存在與派生類個數對應的n個資料(n為派生類個數)

c++虛繼承與普通繼承問題 20

4樓:

class cc++ 過載 覆蓋 隱藏的bai區別和執行du方式成員函式

被過載zhi的特徵(1)相dao同的範圍(專在同乙個類中)屬; (2)函式名字相同; (3)引數不同; (4)virtual 關鍵字可有可無。 覆蓋是指派生類函式覆蓋基類函式,特徵是(1)不同的範圍(分別位於派生類與基類); (2)函式名字相同; (3)引數相同; (4)基類函式必須有virtual 關鍵字。 「隱藏」是指派生類的函式遮蔽了與其同名的基類函式,規則如下(1)如果派生類的函式與基類的函式同名,但是引數不同。

此時,不論有無virtual關鍵字,基類的函式將被隱藏(注意別與過載混淆)。 (2)如果派生類的函式與基類的函式同名,並且引數也相同,但是基類函式沒有virtual 關鍵字。此時,基類的函式被隱藏(注意別與覆蓋混淆) 3種情況怎麼執行:

1。過載:看引數2。

隱藏:用什麼就呼叫什麼3。覆蓋:

呼叫派生類

5樓:自由的鴻鵠

如果有虛函式,就說明該類無法直接生成物件,而且其派生類需要重寫基類的虛函式;

c++普通繼承和虛繼承

6樓:幻夢·人生

首先bai,class a包含乙個虛函式,所du

以sizeof(a)的結果是zhi sizeof(虛表)的大小,也就是

dao4位元組回。

class b繼承class a,所以class b一定答是包含class a,只是包含的方式不同。

普通繼承,class a的虛表會和class b的虛表合併,所以class b中還是保留乙個虛表就可以了。此時sizeof(b)的結果就是4.

虛繼承,class a和class b的關係就會微妙很多。由於c++支援多繼承,所以某些情況下會出現下圖中的繼承關係。這種水晶繼承會導致class d中包含兩份class a的物件。

此時就會出現訪問歧義的情況。

虛繼承就可以避免上面的情況。class a的資料會被放到虛表中。class d會識別到來自class b和c的虛表,然後將兩者合併。

所以回到本件問題,問題中的class b就會包含乙份虛函式表指標,乙份虛類指標。也就是sizeof(b)的結果是8。

關於c中虛函式過載的問題,C 中純虛函式能過載嗎?

在派生類重新定義或者覆寫基類的過載函式,會導致繼承的名稱被遮掩。在派生類的 public 區域增加 using base func 語句可以解決。你在derive類中的func也加上了virtual導致基類函式被覆蓋,所以肯定錯了 大家都說錯了,沒說到重點。這不是什麼虛函式限制,主要原因在於函式呼叫...

請教關於C 中虛基類的問題,請教關於C 中虛基類的乙個問題

這是個菱形繼承,菱形繼承即是子類有兩個父類,這兩個父類都繼承自同乙個類。這時候,如果不使用虛基類,定義子類的時候,會生成兩個 祖父 基類的樣本,在呼叫 祖父 基類的成員函式的時候,就會出現 歧義 錯誤,無法編譯通過。解決的辦法就是使用虛基類,這樣就只保留乙個 祖父 基類的樣本,呼叫也不會出現 歧義 ...

c中函式覆蓋和使用虛函式有什麼區別

我覺得最明顯的復區別,給你制舉個例子。有兩個類bai du 父類 class 子類 student 同有乙個函式zhi名為 num的函式 父類物件 dao class 子類物件 student 那麼函式覆蓋就是 student.num 直接用子類物件呼叫了子類函式 而虛函式則是 class pt p...