C 虛函式問題

2021-07-10 16:39:29 字數 739 閱讀 9740

1. 建構函式中可以呼叫虛函式嗎

可以,只是不會產生動態行為,因為建構函式是從基類開始構造,基類在呼叫虛函式時,子類還未構造,所以呼叫的是基類的函式。

2.析構函式可以呼叫虛函式嗎

如果在父類析構函式中呼叫虛函式,其實際呼叫的是子類的函式,而此時子類析構函式已經把資料銷毀了,會出現不可知的結果。

3.析構函式可以呼叫純虛函式嗎

不可以,編譯會出錯。

5.析構函式可以是純虛函式嗎

可以,但是基類必須提供該析構函式的定義,此時基類是抽象類。抽象類的純虛函式必須由派生類實現,除析構函式可以自身定義外。

6.建構函式可以是虛函式嗎

不可以,但可以是private

7.析構函式可以是虛函式嗎

可以。也可以是private,這樣類只能在堆上構造

8.普通成員函式可以呼叫虛函式嗎

可以,如果基類和子類普通成員函式完全相同,子類會隱藏基類的成員函式,產生動態行為。

9.宣告析構函式為虛函式原因

如果我們刪除乙個指向派生類物件的基類指標,而基類析構函式又是非虛的話, 那麼就會先呼叫基類的析構函式,派生類的析構函式得不到呼叫

總結:c++動態繫結機制僅適用於完全構造的物件,構造和析構函式一樣,物件不完整。 如果在部分構造的函式物件上動態繫結,行為很怪異(與實現有關)

C 虛函式問題

1定義乙個函式式虛函式是為了允許 用基類的指標來呼叫子類的的這個函式。比如下面 這個類的函式呼叫不是在編譯的時候被確定,而是執行的時候被確定。include using namespace std class a 2根據網上部落格,簡單理解虛函式以及虛函式表。虛函式是根據虛函式表來實現的,這個表分配...

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

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

虛函式問題

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