多重繼承與虛函式表

2021-06-02 16:30:16 字數 1412 閱讀 7106

from: 

一 多重繼承

1) **:

#include 

<

iostream

>

using

namespace

std;

class

b1void

f1()

};class

b2void

f2()

};class

b3void

f3()

};class

d : 

public

b1, 

public

b2, 

public

b3virtual

void

vd()};

2)類圖:

3)vs2008的編譯選項檢視布局:

4)視覺化表示:

5)**驗證:

7)總結:

與單繼承相同的是所有的虛函式都包含在虛函式表中,所不同的多重繼承有多個虛函式表,當子類對父類的虛函式有重寫時,子類的函式覆蓋父類的函式在對應的虛函式位置,當子類有新的虛函式時,這些虛函式被加在第乙個虛函式表的後面。

二 多重繼承執行時型別轉化

1)**驗證:

3)總結:

從多重繼承的記憶體布局,我們可以看到子類新加入的虛函式被加到了第乙個基類的虛函式表,所以當dynamic_cast的時候,子類和第乙個基類的位址相同,不需要移動指標,但是當dynamic_cast到其他的父類的時候,需要做相應的指標的移動。

三 完!

出處:

多重繼承虛函式表分析

project100.cpp 此檔案包含 main 函式。程式執行將在此處開始並結束。include pch.h include using namespace std 基類1 class base1 virtual voidg 基類2 class base2 virtual voidi 子類 cl...

虛繼承與虛函式表

一 虛繼承 1 include iostream using namespace std class bvoid fb class d1 virtual public bvoid fd1 class d2 virtual public bvirtual void vd2 void fd2 class...

虛函式,虛繼承與虛函式表

c 實現多型機制 模板技術,rtti 技術,虛函式技術,要麼是試圖做到在編譯時決議,要麼試圖做到執行時決議 虛函式 帶有 關鍵字的函式,並且不帶有 標誌的 虛繼承帶有 關鍵字的繼承,基類被稱為虛基類,會在自己物件的例項中產生虛基類指標 虛函式與菱形繼承的問題 當發生繼承時,如果派生類重寫了基類的虛函...