服務器網(wǎng)站慢的原因seo排名優(yōu)化軟件價格
案例描述:
制作飲品的大致流程為:煮水-沖泡-倒入杯中-加入輔料
利用多態(tài)技術實現(xiàn)本案例,提供抽象制作產(chǎn)品基類,提供子類制作咖啡和茶葉
?思路解析:
?1. 定義抽象基類
- 創(chuàng)建 `AbstractDrinking` 抽象類,該類定義了制作飲品的通用接口。
- 包含四個純虛函數(shù):`Boil()`(煮水)、`Brew()`(沖泡)、`PourInCup()`(倒入杯中)和 `PutSomething()`(加入輔料),這些函數(shù)需要在派生類中具體實現(xiàn)。
- 提供一個 `makeDrink()` 成員函數(shù),該函數(shù)按順序調(diào)用上述四個純虛函數(shù),定義了制作飲品的通用流程。
2. 定義具體飲品類
- 定義 `Coffee` 類,繼承自 `AbstractDrinking` 抽象類。
- 實現(xiàn) `Boil()`、`Brew()`、`PourInCup()` 和 `PutSomething()` 四個純虛函數(shù),具體描述制作咖啡的步驟,如煮開水、沖泡咖啡、倒入杯中、加入糖和牛奶。
- 定義 `Tee` 類(可能拼寫有誤,應為 `Tea`),同樣繼承自 `AbstractDrinking` 抽象類。
- 實現(xiàn) `Boil()`、`Brew()`、`PourInCup()` 和 `PutSomething()` 四個純虛函數(shù),具體描述制作茶的步驟,如煮開水、沖泡茶葉、倒入杯中、加入檸檬。
3. 定義工作函數(shù)
- 定義 `doWork()` 函數(shù),該函數(shù)接受一個指向 `AbstractDrinking` 類的指針作為參數(shù)。
- 在函數(shù)內(nèi)部調(diào)用 `makeDrink()` 函數(shù)制作飲品。
- 使用 `delete` 釋放動態(tài)分配的內(nèi)存,避免內(nèi)存泄漏。
4. 定義測試函數(shù)
- 定義 `test01()` 函數(shù),用于測試制作咖啡和茶的功能。
- 調(diào)用 `doWork()` 函數(shù)制作咖啡,并在制作完成后輸出分隔線。
- 再次調(diào)用 `doWork()` 函數(shù)制作茶。
5. 主函數(shù)
- 在 `main()` 函數(shù)中調(diào)用 `test01()` 函數(shù),啟動測試流程。
- 返回 0 表示程序正常結束。 通過這種設計,代碼實現(xiàn)了制作不同飲品的通用流程,同時利用多態(tài)性可以根據(jù)傳入的具體飲品對象執(zhí)行相應的制作步驟。
?代碼實現(xiàn):
#include<iostream>
using namespace std; class AbstractDrinking{public://煮水 virtual void Boil() = 0;//沖泡 virtual void Brew() = 0;//倒入杯中virtual void PourInCup() = 0;//加入輔料virtual void PutSomething() = 0; //制作飲品void makeDrink(){Boil();Brew();PourInCup();PutSomething(); }
};class Coffee :public AbstractDrinking{public://煮水virtual void Boil(){cout << "煮開水" << endl;} //加入輔料virtual void Brew(){cout << "沖泡咖啡" << endl;} //倒入杯中 virtual void PourInCup(){cout << "倒入杯中" << endl;} //加入輔料virtual void PutSomething(){cout << "加入糖和牛奶" << endl;}
};class Tee :public AbstractDrinking{public://煮水virtual void Boil(){cout << "煮開水" << endl;} //加入輔料virtual void Brew(){cout << "沖泡茶葉" << endl;} //倒入杯中 virtual void PourInCup(){cout << "倒入杯中" << endl;} //加入輔料virtual void PutSomething(){cout << "加入檸檬" << endl;}
};void doWork(AbstractDrinking * abs){abs->makeDrink();delete abs;
}void test01(){doWork(new Coffee);cout << "-----------------" << endl;doWork(new Tee);
}int main(){test01();return 0;
}