c 基礎 多型的實現原理

2021-10-13 13:05:01 字數 840 閱讀 7664

當類中宣告虛函式時,編譯器會在類中生成乙個虛函式表。虛函式表用來儲存虛函式指標的資料結構,由編譯器自動生成和維護。

當存在虛函式時,每個物件都有乙個指向虛函式表的指標(vptr)。編譯器不需要區分子類物件或者父類物件,只需要根據vptr指標來確定呼叫的函式。

編譯器確定是否為虛函式:

fun不是虛函式,編譯器可直接確定被呼叫的成員函式(靜態聯編,根據parent的型別確定)

fun是虛函式,編譯器根據物件p的vptr指標所指的虛函式表查詢fun函式

類定義宣告

//-- 證明vptr指標存在

#if 1

class

aprivate

:int a;};

class

bprivate

:int b;};

#endif

main函式

//-- 證明vptr指標存在

#if 1

intmain()

#endif

輸出結果:

a分配的記憶體:

4a分配的記憶體:

8

物件中的vptr指標什麼時候被初始化?

物件在建立時,由編譯器對vptr指標進行初始化。只用當物件的建構函式完全結束後vptr的指向才最終確定。

C 基礎 多型的實現原理分析

多型的實現原理分析 virtual fun ptr 虛函式表指標 乙個類裡面不管有幾個虛函式,只有乙個虛函式表,只需將其加入表中即可,而指向這個表的指標只有乙個,即虛函式表指標 根據賦值相容規則,父類通過指標和引用子類物件後,只能訪問父類的方法,那為什麼將父類的函式寫為虛函式,子類重寫後,父類卻可以...

C 多型的實現原理

1.用virtual關鍵字申明的函式叫做虛函式,虛函式肯定是類的成員函式。2.存在虛函式的類都有乙個一維的虛函式表叫做虛表。類的物件有乙個指向虛表開始的虛指標。虛表是和類對應的,虛表指標是和物件對應的。3.多型性是乙個介面多種實現,是物件導向的核心。分為類的多型性和函式的多型性。4.多型用虛函式來實...

C 多型的實現原理

1.用virtual關鍵字申明的函式叫做虛函式,虛函式肯定是類的成員函式。2.存在虛函式的類都有乙個一維的虛函式表叫做虛表。類的物件有乙個指向虛表開始的虛指標。虛表是和類對應的,虛表指標是和物件對應的。3.多型性是乙個介面多種實現,是物件導向的核心。分為類的多型性和函式的多型性。4.多型用虛函式來實...