純虛擬函式和抽象類——C++
阿新 • • 發佈:2021-02-15
技術標籤:C++
在多型中,通常父類中的虛擬函式的實現是毫無意義,主要是呼叫子類重寫的內容。
因此可以將虛擬函式改為純虛擬函式。virtual 返回值型別 函式名(引數列表)=0; 該類也成為抽象類(無法例項化物件;子類必須重寫抽象類中的純虛擬函式,否則子類也屬於抽象類)。
程式碼示例:使用相同的介面(makeDrink),完成不同的功能(只需在子類中重寫父類的虛擬函式便可)。
#include<iostream> using namespace std; //多型案例2——製作飲品 class AbstractDrinking { public: //煮水 virtual void Boil() = 0; //沖泡 virtual void Brew() = 0; //倒入杯子中 virtual void WaterInCup() = 0; //加入輔料 virtual void PutSomething() = 0; void makeDrink() { Boil(); Brew(); WaterInCup(); PutSomething(); } }; class coffe :public AbstractDrinking { //煮水 virtual void Boil() { cout << "煮水" << endl; } //沖泡 virtual void Brew() { cout << "沖泡咖啡" << endl; } //倒入杯子中 virtual void WaterInCup() { cout << "倒入杯中" << endl; } //加入輔料 virtual void PutSomething() { cout << "倒入牛奶和糖" << endl; } }; //製作茶水 class tea :public AbstractDrinking { //煮水 virtual void Boil() { cout << "煮農夫山泉" << endl; } //沖泡 virtual void Brew() { cout << "沖泡茶葉" << endl; } //倒入杯子中 virtual void WaterInCup() { cout << "倒入杯中" << endl; } //加入輔料 virtual void PutSomething() { cout << "倒入檸檬" << endl; } }; void doWork(AbstractDrinking *abs) { abs->makeDrink(); //釋放 delete abs; } void test01() { //製作咖啡 doWork(new coffe);//父類的物件或者指標指向子類 cout << "--------------" << endl; doWork(new tea); } int main() { test01(); system("pause"); return 0; }
執行結果: