类和对象多态案例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;
}