不能實現為虛函式的函式以及原因

2021-08-22 16:22:48 字數 395 閱讀 5055

(1)只有類的成員函式才能說明為虛函式。(虛函式的目的是為了實現多型,多型和整合有關,所以宣告乙個非成員函式沒有任何意義)

(2)靜態成員函式不能是虛函式。(靜態成員函式對於每乙個類只有乙份**,所有的物件共享這份**,它不歸某個物件所有,所以沒有動態繫結的必要性,不能被繼承,只屬於該類);

(3)內聯函式不能是虛函式。(內聯函式在程式編譯的時候展開,在函式呼叫處進行替換,虛函式是進行動態繫結的);

(4)建構函式不能為虛函式。(建構函式一般是用來初始化物件的,因而只有在乙個物件生成之後才能發揮多型作用。虛函式表在構造函式呼叫之後才建立,因而建構函式不可能宣告為虛函式。虛函式的呼叫需要虛函式表指標,而該指標存放在物件的記憶體空間中;若建構函式宣告為虛函式,那麼由於物件還未建立,還沒有記憶體空間,更沒有虛函式表位址來呼叫虛函式);

虛函式 以及覆蓋

虛函式以及覆蓋 class a 分析class a中宣告乙個虛函式 f 派生類中class b 對這個虛函式進行了覆蓋,重新定義。a pa new a 中申明乙個a類得指標,並宣告乙個物件。所以 pa f 結果應該為 a b pb b pa 把基類a的指標轉化為派生類b的指標pb 但是pa並沒有變化...

C 中虛函式,純虛函式以及多型

關於建構函式和析構函式 在整理排序演算法的時候想到可以藉此熟悉一下類的構造以及繼承等知識點,就寫了乙個排序基類宣告乙個排序函式,然後寫多個排序演算法的子類重寫這個排序函式,過程中順便研究了一下virtual和多型的概念。首先回顧一下虛函式和純虛函式的八股文,虛函式是多型的實現機制,宣告乙個虛函式就是...

C 多型 虛函式 虛析構函式以及虛函式表

什麼是多型 指不同物件收到相同訊息時或相同物件收到不同訊息時產生不同的動作。這裡先說下為什麼會用到虛函式 以下面的程式為例 這個程式中,carp是fish的繼承類,而carp中覆蓋了swim這個方法,在makefishswim這個函式中,要使用fish類的形參,而你將yourfish這個carp類的...