在
記憶體物件布局 (5)
的**中,在derived類中將三個基類中的虛函式分別覆蓋乙個,即分別覆蓋base1中宣告的vfbase1_1(),base2中宣告的vfbase2_1()以及base3中宣告的vfbase3_1()。保持其他**不變,修改後的derived**如下:
class derived : public base1, public base2, public base3
inline void vfbase1_1()
inline void vfbase2_1()
inline void vfbase3_1()
}; 執行結果如下:
derived物件的memory layout**如下:
derived中覆蓋的虛函式,分別出現在三個不同的虛函式表中,而且分別代替個基類的原虛函式的位置,即:
第乙個虛函式表中,derived::vfbase1_1()代替了base::vfbase1_1()的位置,base::vfbase1_1()不再在虛函式表中出現;
第二個虛函式表中,derived::vfbase2_1()代替了base::vfbase2_1()的位置,base::vfbase2_1()不再在虛函式表中出現;
第三個虛函式表中,derived::vfbase3_1()代替了base::vfbase3_1()的位置,base::vfbase3_1()不再在虛函式表中出現;
在derived中自己定義的虛函式,總是處在第乙個虛函式表的最後一項的位置。
物件記憶體布局 8
在記憶體物件布局 5 的 中,在derived類中將三個基類中的虛函式分別覆蓋乙個,即分別覆蓋base1中宣告的vfbase1 1 base2中宣告的vfbase2 1 以及base3中宣告的vfbase3 1 保持其他 不變,修改後的derived 如下 class derived public ...
物件記憶體布局 1
內容概要 滿足下面2個條件時,1.父類有虛函式,子類無虛函式 即無虛函式重寫或無虛函式覆蓋 2.非虛繼承 類物件之記憶體布局1.base類中有兩個虛函式vfbase 1 vfbase 2 和乙個整形成員變數m base,derived類中有乙個整形成員變數m derived,二者的關係如下 如下 i...
物件記憶體布局 3
內容概要 滿足下面2個條件時,1.父類無虛函式,子類有虛函式 2.非虛繼承 類物件之記憶體布局 前篇 http blog.csdn.net pathuang68 archive 2009 04 23 4101977.aspx 如果將base中的兩個虛函式刪除,情況有會怎麼樣呢?將base中的兩個虛函...