C 中虛函式的實現原理

2021-06-23 01:04:50 字數 524 閱讀 4631

1、對於c++中的虛函式一直都是靠著死記硬背的方式在使用,今天特地查閱了一下它的實現原理。

2、虛函式:c++中為了實現多樣性的乙個工具。使用virtual關鍵字修飾的函式即為虛函式,派生類自動繼承虛函式性質。使用時,用基類指標指向派生類物件,直接呼叫派生類的虛函式。達到

介面與實現分離的目的(多樣性,相同

的方法介面,但因個體差異而採用不同的實現,傳遞的訊息時一樣的,這點不同於過載)。

3、實現原理:如果類中有虛函式,在建立物件的時候編譯器會自動給物件新增乙個成員變數*vptr,該指標指向對應類的虛函式位址表vtbl。vtbl的作用是儲存類中所有定義的虛函式的函式指標,其結構如下圖1所示。 在基類指標指向了派生類物件時,其可以訪問派生類的vptr,此時指標vptr指向的是派生類的虛函式表vbtl。該表中儲存的是派生類中的定義實現的虛函式。因此,就相當於是使用基類指標直接呼叫派生類的成員函式了。而使用者使用時,只需要使用基類的函式fun()作為介面就可以實現相同的訊息不同實體有不同反應的目的了(多樣性)。

圖1  

vtbl結構圖

C 虛函式實現原理

c 中的虛函式的作用主要是實現了多型的機制。基類定義虛函式,子類可以重寫該函式。每個類物件新增乙個成員,該成員中儲存了乙個指向函式位址陣列的指標,稱為虛表指標 vptr 該陣列稱為虛函式表 virtual function table,vtbl 即,每個類使用乙個虛函式表,每個類物件用乙個虛表指標。...

C 覆蓋(虛函式的實現原理)

class shape private int m ir class circle public shape 類circle繼承類shape 當用shape類例項化乙個指標物件,並 shape shape new circle 此時的虛函式是如何實現的呢?當例項化乙個shape物件時,除了生成資料成...

C 虛函式的底層實現原理

在c 中,多型是利用虛函式來實現的。比如說,有如下 include using namespace std class animal class dog public animal void makeanimalcry animal animal int main 輸出如下圖 這裡定義了乙個anim...