C 物件布局及多型實現

2021-05-24 22:32:05 字數 301 閱讀 4288

非虛擬繼承:

虛擬繼承:

在派生類物件裡,按照繼承宣告順序依次分布非虛基類物件,然後是派生類資料成員,最後是虛基類物件。

若直接從虛基類派生的類沒有非虛父類,且宣告了新的虛函式,則該派生類有自己的虛函式表,在該派生類頭部;否則派生類獨有的虛函式被加在第乙個非虛基類的虛函式表後面。

直接從虛基類派生的類內部還有乙個虛基類表指標,在資料成員之前,非虛基類物件之後(若有的話)。

虛基類表中第乙個值是該

虛基類表到

派生類起始位址的偏移;之後的值依次是該派生類的虛基類到該錶位置的位址偏移。

C 物件布局及多型實現的探索

虛函式的類的物件布局 1 如果類中存在虛函式時,情況會怎樣呢?我們知道當乙個類中有虛函式時,編譯器會為該類產生乙個虛函式表,並在它的每乙個物件中插入乙個指向該虛函式表的指標,通常這個指標是插在物件的起始位置。所謂的虛函式表實際就是乙個指標陣列,其中的指標指向真正的函式起始位址。我們來驗證一下,定義乙...

潘凱 C 物件布局及多型實現的探索 二

帶虛函式的類的物件布局 1 如果類中存在虛函式時,情況會怎樣呢?我們知道當乙個類中有虛函式時,編譯器會為該類產生乙個虛函式表,並在它的每乙個物件中插入乙個指向該虛函式表的指標,通常這個指標是插在物件的起始位置。所謂的虛函式表實際就是乙個指標陣列,其中的指標指向真正的函式起始位址。我們來驗證一下,定義...

潘凱 C 物件布局及多型實現的探索 五

普通成員函式的呼叫 從這部分開始我們除了利用記憶體的資訊列印來進行探索外,更多的會通過跟蹤和觀察編譯器產生的彙編 來理解編譯器對這些語言特性的實現方式。彙編方面知識的討論超出了本文的範圍,我只對和我們討論相關的彙編 進行解析。理解本文要討論的知識並不需要有很完整的彙編知識,但必須了解起碼的概念。下面...