C 虛函式問題

2021-06-23 05:07:41 字數 723 閱讀 8038

1定義乙個函式式虛函式是為了允許 用基類的指標來呼叫子類的的這個函式。

比如下面**,這個類的函式呼叫不是在編譯的時候被確定,而是執行的時候被確定。

#include using namespace std;

class a

2根據網上部落格,簡單理解虛函式以及虛函式表。虛函式是根據虛函式表來實現的,這個表分配在例項的記憶體中。虛函式表的指標存在物件例項的最前面的位置,這說明我們可以通過物件例項的位址得到這張虛函式表。然後遍歷其中的函式指標,呼叫相應的函式。

這裡是單繼承,繼承圖如下。

2,一般繼承,無覆蓋。

3,一般繼承,有覆蓋。

想驗證的的話 :

C 虛函式問題

1.建構函式中可以呼叫虛函式嗎 可以,只是不會產生動態行為,因為建構函式是從基類開始構造,基類在呼叫虛函式時,子類還未構造,所以呼叫的是基類的函式。2.析構函式可以呼叫虛函式嗎 如果在父類析構函式中呼叫虛函式,其實際呼叫的是子類的函式,而此時子類析構函式已經把資料銷毀了,會出現不可知的結果。3.析構...

c 多型問題(在虛函式裡呼叫虛函式)

最近在看cocos2d x的原始碼,非常感激cocos2d作者的開源精神。在看 的過程中感覺兩個方向讓我受益,1.把之前從書中看到的c 知識,明白了怎麼運用。2.學習作者駕馭 的巧妙方法。看coco2d x的時候我發現了自己對多型之前不了解的知識,廢話少說上 include include usin...

虛函式問題

inline,static,constructor三種函式都不能帶有virtual關鍵字。inline是編譯時展開,必須有實體 static屬於class自己的,也必須有實體 virtual函式基於vtable 記憶體空間 constructor函式如果是virtual的,呼叫時也需要根據vtabl...