在基類中將乙個函式宣告為虛函式,使該函式具有虛屬性,那麼其所有派生函式中該函式的重寫都具備了虛屬性,也就使得基類指標可以呼叫派生類例項中繼承自該基類的所有成員函式,且若有重寫,呼叫的都是重寫後的函式。
宣告純虛函式可使當前類變成抽象類,禁止該類被例項化,並要求其非抽象類的派生類必須實現該函式。
下面展示虛函式和純虛函式的**示例,注意觀察注釋內容:
class base
virtual ~base() = 0;//純虛析構函式,必須要有函式體
//virtual ~base(){} //很多情況下,基類的虛函式都會有函式體,將析構函式宣告為純虛函式是一種抽象化基類、不許其實例化的一種方法。
};void base::print()
base::~base()
1、純虛函式對類最大的束縛就是:類中一旦出現純虛函式,就不可例項化了;
2、純虛函式還是可以有函式體,只不過最終還是要被派生類重寫,在派生類的函式中可以呼叫基類中有函式體的純虛函式;
3、為使派生類能完全釋放資源,基類析構函式必須宣告為虛函式,否則,在用基類指標new乙個派生類物件後,delete該指標就只能**與基類相關的資源,造成記憶體洩漏;
4、純虛析構函式必須要有函式體,根據c++析構函式的呼叫規則,派生類會呼叫基類析構函式,如果基類析構函式沒有函式體會造成函式呼叫失敗而報錯,這是純虛析構函式與普通純虛函式不同之處。
C 虛函式 純虛函式
1 基本概念 虛函式是在基類中使用關鍵字virtual宣告的函式。在派生類中重新定義基類中定義的虛函式時,會告訴編譯器不要靜態鏈結到該函式。我們想要的是在程式中任意點可以根據所呼叫的物件型別來選擇呼叫的函式,這種操作被稱為動態鏈結,或後期繫結。您可能想要在基類中定義虛函式,以便在派生類中重新定義該函...
C 虛函式 純虛函式
1.析構函式是否應為虛函式問題?2.成員函式的虛函式問題?3.析構函式是否可以為純虛函式問題?說明 僅在使用父類指標指向子類物件時有區別 當析構函式非虛函式時,使用父類指標指向子類物件,在析構時將不會呼叫子類析構函式 當析構函式是虛函式時,使用分類指標指向子類物件,在析構時會呼叫子類析構函式,且呼叫...
C 虛函式 純虛函式
include qdebug class animal void animal animal 即要實現基類animal的animal函式 假如在dog子類中沒有實現animal 函式,則會呼叫基類的animal 函式。即列印 what is the animal 假如在dog子類中實現了animal...