物件記憶體布局 4

2021-08-23 14:48:58 字數 1042 閱讀 3955

內容概要:

滿足下面2個條件時,

1. 父類有虛函式,子類也有虛函式,且子類的虛函式重寫或覆蓋了父類的虛函式

2. 非虛繼承

類物件之記憶體布局

前篇:在前面的例子中,恢復原來的兩個虛函式vfbase_1()和vfbase_2(),同時在derived類中重寫基類的虛函式vfbase_1(),base類和derived類之間的關係如下圖:

整個**如下:

#include

using namespace std;

class base

inline virtual void vfbase_2()

}; class derived : public base

inline void vfbase_1()

}; typedef void (*vfun)(void);

template

vfun virtualfunctionpointer(t* b, int i)

int main(void)

return 0; }

執行結果如下:

derived 物件的memory layout**如下:

因為derived類中重寫了虛函式vfbase_1(),所以derived::vfbase_1()就取代了base::vfbase_1()的位置,位於虛函式表的開始處。而base::vfbase_1()就不會再在derived的虛函式表中出現了。

物件記憶體布局 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中的兩個虛函...

物件記憶體布局 7

前篇 在物件記憶體布局 5 的 中,在derived類中覆蓋base1中宣告的vfbase1 1 其他 不變。修改後的derived的定義如下 class derived public base1,public base2,public base3 inline void vfbase1 1 執行結...