OOP思想之虛函式表分析

2021-07-31 02:21:52 字數 1345 閱讀 2706

設計知識點:

指標型別強制轉換(挑戰你的腦迴路)

虛函式表

#include

using namespace std;

//m g f j goh//總共有七個,不重複有留個.

/*依照邏輯來看(僅僅)b物件虛函式表構成.gf

jmg《這個實際上被重寫了》oh

*/class h

};class a

private:

virtual void f()

virtual void j()

};class b : public a,public h

virtual void o()

virtual void h()

/*virtual void m()

*/virtual void my()

};typedef void(*fun)(void);

struct hello

;//h a b:ah

void main()

fun pyuan = (fun)*(int *)*((int*)(&b) + 1);

pyuan();

/*錯誤理解:寫給自己看備註的筆記

實際上還是概念錯誤,這裡地方實際強轉來強轉去容易犯暈.

虛表實際上是個二維陣列的概念:弄了半天終於弄透了,實際上是換種方式的二維陣列.

本來想變換寫法的:實際上這個將以為陣列首位址強轉了.

void *p = (void *)(*((int*)(&b) + 1));

fun pfun1 = (fun)p;

*///這裡執行了b類中的自己的虛函式《非派生》

pfun = (fun)*((int*)*(int*)(&b) + 5);

pfun();

/*最終總結:

依題說題《因為這方面是編譯器決定的機制:關於虛表是否在對錢記憶體起始處和虛表相關規則的建立,僅僅依照此**得到相關結論,理解機制即可》

1.派生類會為每個基類建立不同的虛表乙個類乙份//算了,把這種說法槍斃掉,由編譯器和平台決定,所幸就具體化來說

1.b類繼承了a和h類.依照我記憶體觀察.b類中就分配了8位元組存放a和h虛表所在位置位址.《也就是一人四個位元組指定它們各自以為陣列位置》

2.b類有自己自定義的虛函式,依照我的觀察,它機制所幸就將那個函式放到當前物件的a虛表中了.

下面鏈結收藏一篇講解詳細的:可以自行轉彎檢視:

虛函式表分析

project100.cpp 此檔案包含 main 函式。程式執行將在此處開始並結束。include pch.h include using namespace std 父類 class base virtual voidg virtual voidh class derive public bas...

虛函式之虛函式表

多型性可分為兩類 靜態多型和動態多型。函式過載和運算子過載實現的多型屬於靜態多型,動態多型性是通過虛函式實現的。每個含有虛函式的類有一張虛函式表 vtbl 表中每一項是乙個虛函式的位址,也就是說,虛函式表的每一項是乙個虛函式的指標。沒有虛函式的c 類,是不會有虛函式表的。兩張圖 簡單例子 inclu...

虛函式表指標,虛函式表

對c 了解的人都應該知道虛函式 virtual function 是通過一張虛函式表 virtual table 來實現的。簡稱為v table。在這個表中,主是要乙個類的虛函式的位址表,這張表解決了繼承 覆蓋的問題,保證其容真實反應實際的函式。這樣,在有虛函式的類的例項中這個表被分配在了 這個例項...