物件記憶體布局 7

2021-09-08 22:08:05 字數 1547 閱讀 2932

在物件記憶體布局 (5)的**中,在derived類中覆蓋base1中宣告的vfbase1_1(),其他**不變。修改後的**如下:

#include using

namespace

std;

class

base1

inline

virtual

void

vfbase1_2()

};class

base2

inline

virtual

void

vfbase2_2()

};class

base3

inline

virtual

void

vfbase3_2()

};class derived : public base1, public base2, public

base3

inline

void

vfbase1_1()

};typedef

void (*vfun)(void

);template

vfun virtualfunctionpointer(t* b, int

i)int main(void

) cout

<

cout

<< "

2nd virtual function table:

"<

i = 0

;

//以32字長的機器,找到下乙個繼承base class的vptr

int* tmp = ((int*)&d)+sizeof(base1)/4

;

//虛函式表中的虛函式後面不為null?如果不加i的限制會出現段錯誤,不能結束迴圈

while(virtualfunctionpointer(tmp, i)&&i<2

)

cout

<

cout

<< "

3rd virtual function table:

"<

i = 0

; tmp = ((int*)&d) + sizeof(base2)/4

;

while(virtualfunctionpointer(tmp, i)&&i<2

)

return0;

}

執行結果:

derived物件值memory layout**如下:

我們可以看到,在derived中overriden的虛函式derived::vfbase1_1排在第乙個虛函式表的第一位。虛函式base::vfbase1_1()由於已經被overridden,所以在derived物件的虛函式表中不再出現。

物件記憶體布局 7

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

物件記憶體布局 7

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

物件記憶體布局 1

內容概要 滿足下面2個條件時,1.父類有虛函式,子類無虛函式 即無虛函式重寫或無虛函式覆蓋 2.非虛繼承 類物件之記憶體布局1.base類中有兩個虛函式vfbase 1 vfbase 2 和乙個整形成員變數m base,derived類中有乙個整形成員變數m derived,二者的關係如下 如下 i...