C 虛函式 純虛函式

2021-08-08 05:55:09 字數 1292 閱讀 9029

1、基本概念

虛函式是在基類中使用關鍵字virtual宣告的函式。在派生類中重新定義基類中定義的虛函式時,會告訴編譯器不要靜態鏈結到該函式。

我們想要的是在程式中任意點可以根據所呼叫的物件型別來選擇呼叫的函式,這種操作被稱為動態鏈結,或後期繫結

您可能想要在基類中定義虛函式,以便在派生類中重新定義該函式更好地適用於物件,但是您在基類中又不能對虛函式給出有意義的實現,這個時候就會用到純虛函式。

我們可以把基類中的虛函式 area() 改寫如下:

class

shape

// pure virtual function

virtual

intarea()

= 0;

};

= 0 告訴編譯器,函式沒有主體,上面的虛函式是純虛函式

1、純虛函式宣告如下: virtual void funtion1()=0; 純虛函式一定沒有定義,純虛函式用來規範派生類的行為,即介面。包含純虛函式的類是抽象類,抽象類不能定義例項,但可以宣告指向實現該抽象類的具體類的指標或引用。

2、虛函式宣告如下:virtual returntype functionname(parameter) 虛函式必須實現,如果不實現,編譯器將報錯,錯誤提示為:

error lnk

****:

unresolved external symbol

"public: virtual void __thiscall classname::virtualfunctionname(void)"

3、對於虛函式來說,父類和子類都有各自的版本。由多型方式呼叫的時候動態繫結。

4、實現了純虛函式的子類,該純虛函式在子類中就程式設計了虛函式,子類的子類即孫子類可以覆蓋該虛函式,由多型方式呼叫的時候動態繫結。

5、虛函式是c++中用於實現多型(polymorphism)的機制。核心理念就是通過基類訪問派生類定義的函式。

6、在有動態分配堆上記憶體的時候,析構函式必須是虛函式,但沒有必要是純虛的。

7、友元不是成員函式,只有成員函式才可以是虛擬的,因此友元不能是虛函式。但可以通過讓友元函式呼叫虛擬成員函式來解決友元的虛擬問題。

8、析構函式應當是虛函式,將呼叫相應物件型別的析構函式,因此,如果指標指向的是子類物件,將呼叫子類的析構函式,然後自動呼叫基類的析構函式。

多型:

形成多型必須具備三個條件:

2、記憶體管理

待續

C 虛函式 純虛函式

1.析構函式是否應為虛函式問題?2.成員函式的虛函式問題?3.析構函式是否可以為純虛函式問題?說明 僅在使用父類指標指向子類物件時有區別 當析構函式非虛函式時,使用父類指標指向子類物件,在析構時將不會呼叫子類析構函式 當析構函式是虛函式時,使用分類指標指向子類物件,在析構時會呼叫子類析構函式,且呼叫...

C 虛函式 純虛函式

include qdebug class animal void animal animal 即要實現基類animal的animal函式 假如在dog子類中沒有實現animal 函式,則會呼叫基類的animal 函式。即列印 what is the animal 假如在dog子類中實現了animal...

虛函式 純虛函式

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