宣告:virtual 《資料型別》 《成員函式名》 (《形參表》) = 0; // 沒有花括號
純虛函式:不給出函式的實現**,沒有函式體,僅為類族提供統一的介面,相當於標準介面。在派生類中如果給出了純虛函式的具體實現,該函式在派生類中就成為一般的虛函式。注意將純虛函式和函式體為空的虛函式區分開。
一般而言,基類和派生類都可以用來宣告相應類的物件。但也可以根據需要,把基類作為純粹的一種抽象概念,即把他的一些行文(成員函式)不給出具體的實現,這樣的類成為抽象類。顯然,抽象類至少有乙個純虛函式。
抽象類不能被用來宣告物件(不能例項化)。也稱抽象基類。建立乙個統一的公共介面,具體實現由派生類去完成。【ps:並不是有純虛函式就不能例項化】
與一般基類一樣,可以宣告抽象類的引用和指標(不是物件例項)。通過指標或引用可以訪問派生類的物件,並呼叫派生類的成員函式,從而實現虛函式的執行時多型。
ps:當基類是抽象類時,只有在派生類中對基類的所有的純虛函式給出具體實現**,該派生類才不會成為抽象類。
對純虛函式的乙個誤解就是:基類不能給出純虛函式的實現**。
實際上可以,允許在類體外為基類的純虛函式給出具體實現。但注意的是,即使基類定義了純虛函式的實現**,在派生類中也必須對純虛函式進行覆蓋。否則,無法實現派生類的例項化,因為派生類仍是乙個抽象類。
實際上,定義純虛函式的目的是:為了定義抽象類。如果要定義乙個抽象類,那麼至少要定義乙個純虛函式。如果類中沒有合適的成員函式可以定義為純虛函式,可以將析構函式定義為純虛函式。
雖然析構函式可以是純虛函式,但是純虛析構函式必須有具體實現**。而且純虛析構函式的定義要放在類體外。
class cshape
virtual ~cshape() = 0;//宣告為純虛析構函式
virtual double area()//函式體為空的虛函式
};cshape::~cshape()
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...