#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...