老規矩–妹妹鎮樓:
虛函式: 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...