虛函式的限制

2021-06-29 16:10:51 字數 861 閱讀 8975



虛函式的限制

乙個基類中將所有的成員函式都盡可能地設定為虛函式總是有益的(若該類不是派生類的基類,將成員函式設定為虛函式沒有實際意義)。它除了會增加記憶體開銷並無壞處。

在設定虛函式時必須注意下列事項:

1、只有類的成員函式才能宣告為虛函式。這是因為虛函式僅適用於有繼承關係的類物件,所以普通函式不能宣告為虛函式。

2、靜態成員函式不能是虛函式,因為靜態成員函式不受限於某個物件。

3、內聯函式不能是虛函式,因為內聯函式是不能在執行中動態確定其位置的,即使虛函式在類的內部定義,編譯時仍然將它視為非內聯函式。

4、建構函式不能是虛函式,因為構造時物件還不是占用記憶體的真正物件,這時,還沒辦法呼叫任何成員函式,包括虛函式。只有在構造完成後,物件才能成為乙個類的名副其實的例項。

5、析構函式可以是虛函式,而且通常被宣告為虛函式。宣告虛析構函式的目的在於:使用delete運算子刪除乙個物件時,能確保析構函式被正確的執行。因為這個時候,採用動態幫的原則,派生類物件自己定義的析構函式就會發生作用。

下面有乙個例項:

#include

using namespace std;

class a

void main()

//正確結果為5。

//上面這個例子,基類a的函式為虛函式,則存在動態繫結,這樣的話,fn(b)應該呼叫派生類的函式則結果好像為5.5。

//但是相反的是,正確結果為5。

//為什麼結果是5而不是5.5呢?這是由於虛函式的引數限制所致。

//一般要求基類中宣告了虛函式後,派生類宣告的虛函式應該與基類中的虛函式的引數個數相等,對應引數型別一樣,

//若不相等則由編譯器將派生類的函式的引數型別強制轉換為基類中虛函式的引數型別。

虛指標,虛函式,虛函式表,純虛函式

虛指標 虛繼承 在使用多重繼承時,如存在 class a 有m a變數 class a1 virtual public a,m a1 class a2 virtual public a m a2 class b public a1,public a2 m b 時 存在以下記憶體儲存順序 虛指標 指向...

python虛函式 虛函式和純虛函式的區別

首先 強調乙個概念 定義乙個函式為虛函式,不代表函式為不被實現的函式。定義他為虛函式是為了允許用基類的指標來呼叫子類的這個函式。定義乙個函式為純虛函式,才代表函式沒有被實現。定義純虛函式是為了實現乙個介面,起到乙個規範的作用,規範繼承這個類的程式設計師必須實現這個函式。1 簡介 假設我們有下面的類層...

虛函式 純虛函式

一 定義.純虛函式是在基類中宣告的虛函式,它在基類中沒有定義,但要求任何派生類都要定義自己的實現方法。在基類中實現純虛函式的方法是在函式原型後加 0 virtual void funtion1 0 二 引入原因 1 為了方便使用多型特性,我們常常需要在基類中定義虛函式。2 在很多情況下,基類本身生成...