內容概要:
滿足下面2個條件時,
1. 父類有虛函式,子類也有虛函式,但子類並沒有重寫或覆蓋父類的虛函式
2. 非虛繼承
類物件之記憶體布局
續前篇:
如果在derived類中增加乙個下面的虛函式,會怎麼樣呢?base類和derived類之間的關係如下:
新加入的虛函式定義如下:
inline virtual void vfderived()
執行結果如下:
derived物件的memory layout**如下:
我們發現,
derived
類本身並沒有因為增加了乙個虛函式,而增加乙個
vptr
,這是因為編譯器將
derived
類中定義的虛函式加入到了其基類的虛函式表中,
derived
因此共用了基類
base
的vptr
,就象是它自己的一樣(其實當然也是derived類自己的,因此base subobject都被derived包含了)。為什麼說這個
vptr
是base
的呢?因為基類在派生類中必須保證其所謂的「原始的完整性」。
C 物件模型之記憶體布局(2)
多重繼承 繼承關係大於2,至少有父類,子類,孫子類三代關係。使用vs2017檢視物件記憶體布局如下 class c size 20 0 base class b 0 base class a 0 4 a1 8 a2 12 b1 16 c1 c vftable c meta 0 0 c a1 1 a ...
物件記憶體布局 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中的兩個虛函...