C 學習筆記(十九) 之抽象基類和純虛函式

2021-10-08 05:17:36 字數 1621 閱讀 4132

老規矩–妹妹鎮樓:

虛函式: virtual void speak() {}

純虛函式: virtual void speak() = 0;

純虛函式在虛函式的後面加上了 = 0

基類中新增了至少乙個純虛函式的基類稱為抽象類。

從「抽象「這兩個字可以看出,這是乙個範圍很大的類,抽象即不是具體的,有公共使用的意思。

由於抽象基類中有純虛函式,而純虛函式都是沒有具體實現的,只是在後面加上 = 0,則抽象基類是無法例項化的,因為,純虛函式都是沒有具體實現的。

當繼承乙個抽象類時,子類必須要將父類中的純虛函式給具體實現,不然繼承下來的子類依然是抽象類,是無法例項化的。

純虛函式 virtual void fun() = 0其實就是告訴編譯器在抽象類的vftable中為該純虛函式保留乙個位置,但是該位置並沒有存放相應的位址。是為了等待子類繼承並具體實現。

抽象類是為了建立乙個公共使用的類,將子類的公共操作抽象出來,然後子類們通過繼承這個抽象基類,可以在它的基礎上完成更加具體的實現。因此,這個抽象基類是不需要實現的,即純虛函式 = 0 的形式就可以理解了。

抽象基類是泡飲品的抽象操作

子類 泡咖啡是 泡飲品的具體操作

子類 泡茶是 泡飲品的具體操作

泡茶和泡咖啡通過繼承泡飲品的共用操作,完成實現。

#define _crt_secure_no_warnings

#include

using

namespace std;

//抽象基類,製作飲品

class

abstractdrinking};

//子類製作咖啡

class

coffee

:public abstractdrinking

//泡virtual

void

brow()

//倒入杯子

virtual

void

pourincup()

//輔料

virtual

void

putsomething()

};//子類 泡茶

class

tea:

public abstractdrinking

//泡virtual

void

brow()

//倒入杯子

virtual

void

pourincup()

//輔料

virtual

void

putsomething()

};//業務函式

void

dobussiness

(abstractdrinking* drink)

void

test()

intmain()

C 抽象基類和純虛函式

為什麼c 要定義抽象基類?c 為什麼要定義抽象基類?抽象類就是類裡定義了純虛成員函式的類。純虛函式只提供了介面,並沒有具體實現。抽象類不能被例項化,通常是作為基類供子類繼承,子類中重寫虛函式,實現具體的介面。為什麼要定義抽象基類呢?依我所見主要有以下原因 1.最重要的原因是,可以將介面與實現分離。介...

c 純虛函式和抽象基類

c 物件導向程式設計的思想之一是可以使用繼承。繼承中乙個重要的思想是使用抽象基類 abstract base class,abc 假設我們開發乙個程式,需要使用橢圓和圓兩種圖形。因為圓是橢圓的一種特殊情形,根據繼承 is a 的思想,自然會想到先定義乙個eclipse類,再將circle類繼承自ec...

純虛函式和抽象基類

純虛函式的格式 virtual 型別 函式名 參數列 0 而我們的純虛函式經常被用來構建抽象基類。抽象基類 當我們僅想對基類進行向上型別轉換,使用它的介面,而不希望使用者實際地建立乙個基類的物件,那麼我們就在基類中加入至少乙個純虛函式 pure virtual function 來使基類稱為抽象 a...