沒有函式體並且在定義的時候要在後面加個=0
宣告:virtual 函式型別 函式名 (參數列列) = 0;
注意:
(1)純虛函式沒有函式體;
(2)最後面的「=0」並不表示函式返回值為0,它只起形式上的作用,告訴編譯系統「這是虛函式」;
(3)這是乙個宣告語句,最後有分號。
為什麼要引入純虛函式?
因為比如說定義乙個人類,人類可以工作,但是工作的定義有很多;工人類公有繼承人類,也可以工作,但是工人類又分有很多任務種,對於工作的定義也不同;所以將基類的工作定義為純虛函式,派生類根據需求對他進行自己的定義,也實現了類的多型性
含有純虛函式的類叫做抽象類
抽象類的作用是作為乙個類族的共同基類,為乙個類族提供公共介面,抽象類不能例項化出物件。
純虛函式在派生類中重新定義以後,派生類才能例項化出物件。
抽象類只能作為基類來使用,其純虛函式的實現由派生類給出。如果派生類沒有重新定義純虛函式,而派生類只是繼承基類的純虛函式,則這個派生類仍然還是乙個抽象類。如果派生類中給出了基類純虛函式的實現,則該派生類就不再是抽象類了,它就可以建立該類的例項了。
僅含有純虛函式的類稱為介面類(無資料成員,僅有成員函式,且都是純虛函式)
介面類更多的表達一種能力或協議
介面類可以被繼承
介面類**演示
/************
介面類:
1、flyable類,成員函式:takeoff、land
2、plane類,成員函式:構造、takeoff、land、printcode,資料成員:m_strcode
3、fighterplane類,成員函式:構造、takeoff、land
4、全域性函式flymatch(flyable *f1,flyable *f2)
*************/
flyable.h
#ifndef flyable_h
#define flyable_h
#include#includeusing namespace std;
class flyable//介面類(僅有純虛函式)
;#endif
plane.h
#ifndef plane_h
#define plane_h
#include"flyable.h"
class plane:public flyable
;#endif
plane.cpp
#include"plane.h"
plane::plane(string code)
void plane::takeoff()
;#endif
fighterplane.cpp
#include"fighterplane.h"
fighterplane::fighterplane(string code):plane(code)
void fighterplane::takeoff()
int main()
執行結果:
根據執行結果,我們得知,派生類雖然繼承了介面類,但他定義了純虛函式,所以可以正常例項化物件,並且可以正常呼叫。
多型 3 純虛函式和抽象類
2 純虛函式的語法 3 示例 純虛函式是乙個在基類中說明的虛函式,在基類中沒有定義,要求任何派生類都定義自己的版本。虛函式為個派生類提供乙個公共介面 介面的封裝和設計 軟體的模組功能劃分 乙個具有純虛函式的基類稱為抽象類,抽象類不能例項化。抽象類的子類必須要重寫父類中的純虛函式,否則也屬於抽象類。v...
多型,虛函式,純虛函式,抽象類
c 中,實現多型有以下方法 虛函式,抽象類,過載,覆蓋 多型性在object pascal和c 中都是通過虛函式 virtual function 實現的。這麼一大堆名詞,實際上就圍繞一件事展開,就是多型,其他三個名詞都是為實現c 的多型機制而提出的一些規則,下面分兩部分介紹,第一部分介紹 多型 第...
c 抽象類 純虛函式
1 錄入下面程式,分析編譯錯誤資訊。include include include using namespace std class abstract virtual void f 0 int main 分析 這個程式最大的問題就是abstract p new abstract 定義了乙個抽象類的...