C 多型3 純虛函式 抽象類 介面類

2021-09-22 18:41:09 字數 1733 閱讀 3184

沒有函式體並且在定義的時候要在後面加個=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 定義了乙個抽象類的...