Cpp 物件模型探索 多重繼承虛函式表分析

2021-09-28 21:47:48 字數 851 閱讀 4781

#include class base1

; virtual void func12()

virtual void func13()

virtual void func14()

};class base2

virtual void func22()

virtual void func23()

};class son : public base1, public base2

void func23()

virtual void son1()

virtual void son2()

};using func = void (*)();

int main()

結果:

虛函式表1

base1::func11()

son::func12()

base1::func13()

base1::func14()

son::son1()

son::son2()

虛函式表2

對於繼承了多個帶有虛函式的父類的子類來說,該類有多個虛函式表,虛函式表的數量和父類的數量相同。

類物件有多個虛函式表指標,數量和父類的數量相同。這些虛函式表指標會依次放到子類物件的開始位置。

(saw:game over!)

Cpp 物件模型探索 不能被繼承的類

兩種方法 c 11 final 關鍵字 友元類 虛繼承。栗子class a friend class b class b virtual public a 我們的目的是讓 b 成為乙個不能被繼承的類。分析 由於 b 是 a 的友元,所以即使 a 的建構函式是私有的,b也是可以呼叫的,所以 b 繼承 ...

多重繼承的物件模型

廢話少說,在c 中是允許多重繼承的,比如有乙個派生類cimp派生自cbasea,和cbaseb。在cimp中覆蓋了兩個基類中的虛函式。如果乙個函式要求基類的指標,而我們傳遞乙個派生類物件的位址,編譯器如何保證這是安全的。在c 中,類是編譯期的,為了實現多重繼承,在派生類的記憶體布局中保留了基類的完整...

Cpp 物件模型探索 物件訪問成員變數的原理

1 原始碼 include include class base public int bi class a public base public virtual void func public int i int main 2 結果 base 的 this 指標 004ff9b4 a 的 thi...