当前位置: 首页 > news >正文

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

http://www.lryc.cn/news/547467.html

相关文章:

  • 嵌入式产品级-超小尺寸游戏机(从0到1 硬件-软件-外壳)
  • 计算机毕业设计Python+Django+Vue3微博数据舆情分析平台 微博用户画像系统 微博舆情可视化(源码+ 文档+PPT+讲解)
  • 前端开发10大框架深度解析
  • Mybatis 的关联映射(一对一,一对多,多对多)
  • 深度解码!清华大学第六弹《AIGC发展研究3.0版》
  • /dev/console文件详解
  • ProfibusDP主站转ModbusTCP网关如何进行数据互换
  • springboot3 WebClient
  • 牛客周赛 Round 83
  • 硬通货用Deekseek做一个Vue.js组件开发的教程
  • Windows权限维持之利用安全描述符隐藏服务后门进行权限维持(八)
  • Ubuntu20.04双系统安装及软件安装(七):Anaconda3
  • 【极光 Orbit•STC8A-8H】02. STC8 单片机工程模板创建
  • Spring Boot WebFlux 中 WebSocket 生命周期解析
  • PostgreSQL中的事务隔离
  • 基于Rye的Django项目通过Pyinstaller用Github工作流简单打包
  • ubuntu 20.04 C++ 源码编译 cuda版本 opencv4.5.0
  • 【VUE】第一期——初使用、基本语法
  • 计算光学成像与光学计算概论
  • 开启科创服务新篇章:八月瓜科技CRM数字化管理系统成功上线
  • AI提示词(Prompt)的理解和学习指南
  • 记录一些面试遇到的问题
  • OpenHarmony4.0_Linux环境搭建
  • DeepSeek开源Day5:3FSsmallpond技术详解
  • Java集合面试篇
  • plt和cv2有不同的图像表示方式和颜色通道顺序
  • Sqlserver安全篇之_手工创建TLS用到的pfx证书文件
  • 基于RapidOCR与DeepSeek的智能表格转换技术实践
  • 创建阿里云CDN
  • tomcat的web管理