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 技術,虛函式技術,要麼是試圖做到在編譯時決議,要麼試圖做到執行時決議 虛函式 帶有 關鍵字的函式,並且不帶有 標誌的 虛繼承帶有 關鍵字的繼承,基類被稱為虛基類,會在自己物件的例項中產生虛基類指標 虛函式與菱形繼承的問題 當發生繼承時,如果派生類重寫了基類的虛函...