關於虛函式和虛繼承

2021-09-13 07:43:05 字數 676 閱讀 5129

基類中無虛函式,派生類中有虛函式,基類的指標指向派生類物件(指向的是派生類中基類的起始部分),delete  時只析構基類的物件而不析構派生類的物件。

基類指標指向派生類的的情況下,基類的虛構要設為虛析構。

虛表合併時向內層合併,虛表合併時會先拷貝乙份副本,然後合併的時候使用副本合併。

虛函式表的生成在編譯器間,物件的生成在執行期間。物件的虛函式指標在構造之前就指向虛表了。即虛表的寫入時機是在開闢空間之後,構造物件之前。

c++純虛函式是指只有宣告,沒有實現的函式,定義形式是:virtual  void  func()  =  0;

擁有純虛函式的類叫做抽象類。

型別轉換的幾種方式:

特殊類特殊處理時可以用typeid來獲取型別,也可以用上述4方法  class_name  *  a  = dynamic_cast(a)

多繼承——菱形繼承   

虛繼承:解決記憶體重複的問題   繼承時前面加virtual。 比如說b繼承a ,c繼承a,這個時候d繼承b,c,我們稱d為a的間接派生類。這樣就會造成a中的資料重複繼承,為了解決資料重複的問題,我們使用虛繼承來實現類似於菱形繼承這樣的繼承方式。思路是將重複資料放到派生類的最底層,含有重複資料的區域用乙個虛基類指標代替,虛基類指標指向乙個虛基類表,虛基類表裡面存放兩個資料,乙個是虛基類指標相對於當前作用域的偏移,另乙個是虛基類指標相對於重複資料的偏移。

虛繼承和虛函式繼承

虛繼承主要用於菱形 形式的繼承形式 虛繼承是為了在多繼承的時候避免引發歧義,比如類 有個就是a,繼承了 c也繼承了 當 多繼承 時,就會有歧義產生了,所以要使用虛擬繼承避免重複拷貝。虛函式繼承是解決多型性的,當用基類指標指向派生類物件的時候,基類指標呼叫虛函式的時候會自動呼叫派生類的虛函式,這就是多...

c 虛函式和虛繼承

c 中,多型的實現需要虛函式,而虛函式主要包括兩部分,虛函式指標和虛函式表。基類將自己的一些函式設為虛函式,子類則需要在繼承基類後,重寫或者直接使用從基類的繼承下來的虛函式。基類自己會儲存乙份虛函式表,這個虛函式表含有指向基類虛函式的虛函式指標。當子類繼承基類後,同樣會將基類的虛函式表繼承下來,這樣...

虛函式 虛繼承

include using namespace std class a class b public a class c public b int main 結果是 4,4,4 為什麼?一,在private,protect,public的實際繼承中,派生類和基類擁有相同的虛函式表。但如果是虛繼承,會...