类和对象多态案例2制作饮品
目录
类和对象—多态—案例2—制作饮品
案例描述:
制作饮品的大致流程为:煮水-冲泡-倒入杯中-加入辅料
利用多态技术实现本案例,提供抽象制作产品基类,提供子类制作咖啡和茶叶

思路解析:
1. 定义抽象基类
创建
AbstractDrinking抽象类,该类定义了制作饮品的通用接口。包含四个纯虚函数:
Boil()(煮水)、Brew()(冲泡)、PourInCup()(倒入杯中)和PutSomething()(加入辅料),这些函数需要在派生类中具体实现。提供一个
makeDrink()成员函数,该函数按顺序调用上述四个纯虚函数,定义了制作饮品的通用流程。
2. 定义具体饮品类
定义
Coffee类,继承自AbstractDrinking抽象类。实现
Boil()、Brew()、PourInCup()和PutSomething()四个纯虚函数,具体描述制作咖啡的步骤,如煮开水、冲泡咖啡、倒入杯中、加入糖和牛奶。定义
Tee类(可能拼写有误,应为Tea),同样继承自AbstractDrinking抽象类。实现
Boil()、Brew()、PourInCup()和PutSomething()四个纯虚函数,具体描述制作茶的步骤,如煮开水、冲泡茶叶、倒入杯中、加入柠檬。
3. 定义工作函数
定义
doWork()函数,该函数接受一个指向AbstractDrinking类的指针作为参数。在函数内部调用
makeDrink()函数制作饮品。使用
delete释放动态分配的内存,避免内存泄漏。
4. 定义测试函数
定义
test01()函数,用于测试制作咖啡和茶的功能。调用
doWork()函数制作咖啡,并在制作完成后输出分隔线。再次调用
doWork()函数制作茶。
5. 主函数
在
main()函数中调用test01()函数,启动测试流程。返回 0 表示程序正常结束。 通过这种设计,代码实现了制作不同饮品的通用流程,同时利用多态性可以根据传入的具体饮品对象执行相应的制作步骤。
代码实现:
#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;
}
