純虛函式和抽象類

2021-10-03 04:35:07 字數 1433 閱讀 5112

純虛函式是一種特殊的虛函式,前面分析過虛函式,虛函式是virtual修飾的類的成員函式,可以有實現。而純虛函式也和虛函式一樣,用virtual來修飾的類的成員函式,但是只能有函式體不能有具體實現

一般格式:

class 《類名》

1、純虛函式是乙個在父類中只有函式體,沒有實現,實現在子類中去完成

2、純虛函式為各子類提供了乙個公共介面(介面的封裝和設計、軟體的模組功能劃分)

3、乙個具有純虛函式的父類也稱為抽象類

1、為了方便使用多型特性

2、在很多情況下,父類本身生成物件是不合理的。例如,動物作為乙個父類可以派生出貓、狗等子類,但動物本身生成物件明顯不合理。

#pragma warning(disable : 4996)

#include using namespace std;

class animal

~animal() {}

virtual void call()

virtual void eat() = 0;

private:

int m_a;

};class cat:public animal

~cat() {}

virtual void call()

void eat()

private:

int m_a;

};//不允許使用抽象類作函式引數

//void test(animal a){}

int main()

如上面的例子,我們可以總結對抽象類做哪些操作是合理的:

1、可以宣告抽象類的指標:animal *cat = new cat();

2、可以宣告抽象類的引用:animal &cat

c++中沒有介面這個概念,學過其他高階語言的朋友可能接觸過了介面(協議)這個概念,那麼c++中的抽象類就是模擬的這種機制。但是在繼承中高階語言不能繼承多個父類,可以繼承多個介面,c++中沒有介面這個概念,但可以繼承多個類,那就是多繼承概念。

絕大多數物件導向語言都不支援多繼承,絕大多數物件導向語言都支援介面的概念,c++中沒有介面的概念,c++中可以使用純虛函式實現介面,介面類中只有函式原型定義,沒有任何資料的定義

class inte***ce1

;class inte***ce2

;class parent

;class child : public parent, public inte***ce1, public inte***ce2

int add(int a, int b)

int minus(int a, int b)

};int main()

由上面的例子可以得出:

純虛函式和抽象類

純虛函式和抽象類 語法格式 virtual 返回值型別 函式名 引數 0 1 純虛函式沒有函式體,之有 宣告 0.只表示是純虛函式,2 0 不表示返回值是0,只是乙個形式,告訴編譯器這是純虛函式 3 包含純虛函式的類稱為抽象類 4 抽象類通常稱為基類,讓派生類去實現純虛函式。派生類必須實現純虛函式才...

純虛函式和抽象類

一.純虛函式和抽象類的概念 用 顯示 class figure 抽象類 注意一下幾點 figure c1 錯誤,抽象類不能建立物件 figure p null 正確,抽象類可以宣告自己的指標 figure fun 錯誤,抽象類不能作為返回型別 void fun figure 錯誤,抽象類不能作為引數...

純虛函式和抽象類

虛函式的定義就不囉嗦了,純虛函式和虛函式類似,但是不提供實現!啥意思呢?見下面的例子 這個方法就是純虛函式,別丟了後邊那個 0,它是用來留給子類去實現的。這下大家或許會疑惑,那麼包含了這個函式的類怎麼建立物件呢?事實上這個類是建立不了例項的,因為包含了乙個及以上個純虛函式的類被稱為抽象類。抽象類是不...