c 多型之虛函式憑什麼實現多型

2021-07-22 19:49:10 字數 471 閱讀 3232

我們都知道,有純虛函式的類成為抽象類,一般作為介面類使用。

含有虛函式的類都會產生乙個虛函式表指標,指向虛函式表。

如果基類中有虛函式,那麼派生類同樣會繼承基類的虛函式表指標。

如圖:

vptr作為虛函式表指標,指向虛函式表vtable,表中內容看圖即可理解。

如果派生類講vfub2函式進行修改,就會影響派生類所繼承的虛函式表,虛函式表也就進行相應的修改,如下圖:

當class1* pclass = new class2時,呼叫 pclass ->vfunc2(),pclass指標就會根據虛函式表指標直接找到class2::vfunc2();這樣就實現了所謂的多型。

多型實現之虛函式

多型的實現分為靜態多型和動態多型,靜態多型主要靠函式過載,動態多型主要靠虛函式 當類中宣告了虛函式之後,該類的記憶體映像會獲得乙個虛表指標,叫做 vfptr指向該類的虛表,下面的我測試使用的類圖 有的沒必要的東西沒有寫 這裡恰好還是乙個菱形繼承,但是就像我之前說的虛繼承和虛表關係不大,所以單繼承也是...

C 多型之虛函式

問題 用基型別的指標指向派生類物件時,通過這個指標來訪問該物件,這是會出現訪問到的只是從基類繼承來的同名成員。解決方法 在基類中將這個同名函式宣告為虛函式,這樣就可以通過基型別的指標,訪問不同派生類的物件產生不同的行為,從而實現執行過程的多型。語法 virtual 函式型別 函式名 形參表 注意 必...

多型之虛函式

虛函式實現執行時多型。虛函式宣告只出現在類定義函式原型宣告中,而不能在成員函式實現的時候。虛函式一般不宣告為內聯函式,因為虛函式訪問時需要動態繫結,而內聯函式是靜態的。virtual關鍵字可以省略,當基類中已經宣告了虛函式,那麼派生類中和基類同返回值,同名,同形參的函式即使沒有加virtual也可判...