內容概要:
滿足下面3個條件時,
1. 父類有虛函式,子類也有虛函式,且子類的虛函式重寫或覆蓋了父類的虛函式
2. 非虛繼承
3. 多重繼承
類物件之記憶體布局
前篇:
多重繼承,派生類不重寫基類中的虛函式。
假定各類之間的關係如下圖:
**如下:
#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
}; typedef void (*vfun)(void);
template
vfun virtualfunctionpointer(t* b, int i)
int main(void)
cout << endl;
cout << "2nd virtual function table: " << endl;
i = 0;
int* tmp = ((int*)&d) + 2;
while(virtualfunctionpointer(tmp, i))
cout << endl;
cout << "3rd virtual function table: " << endl;
i = 0;
tmp = ((int*)&d) + 4;
while(virtualfunctionpointer(tmp, i))
return 0; }
執行結果如下:
derived物件之memory layout如下:
由上面的分析可知:
其一:有三個虛函式表
其二:在derived類中定義的虛函式derived::vfderived()附加在乙個虛函式表的最後
物件記憶體布局 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 執行結...