多态应用实例--制作饮品

复制代码
 1 #include<iostream>
 2 using namespace std;
 3 
 4 class AbstractDrinking
 5 {
 6 public: // 注意这里不写的话默认是private的
 7     // 纯虚函数
 8     // 这个类叫抽象类,无法实例化对象,子类必须重写父类中的函数
 9     virtual void boil() = 0;
10     virtual void Brew() = 0;
11     virtual void PourIncup() = 0;
12     virtual void Add() = 0;
13     void makeDrink() {
14         boil();
15         Brew();
16         PourIncup();
17         Add();
18     }
19 };
20 
21 class Coffee : public AbstractDrinking
22 {
23 public:
24     void boil() {
25         cout << "煮水" << endl;
26     }
27     virtual void Brew() {
28         cout << "加咖啡" << endl;
29     }
30     virtual void PourIncup() {
31         cout << "倒水" << endl;
32     }
33     virtual void Add() {
34         cout << "加牛奶" << endl;
35     }
36     
37 };
38 
39 class Tea : public AbstractDrinking
40 {
41 public:
42     void boil() {
43         cout << "煮水" << endl;
44     }
45     virtual void Brew() {
46         cout << "加茶叶" << endl;
47     }
48     virtual void PourIncup() {
49         cout << "倒水进杯" << endl;
50     }
51     virtual void Add() {
52         cout << "加点枸杞" << endl;
53     }
54 
55 };
56 void doWork(AbstractDrinking * abs) {
57     abs->makeDrink();
58     delete abs; // 释放堆区的数据
59 }
60 void test01() {
61     doWork(new Coffee);
62 
63     cout << "chaye " << endl;
64 
65     doWork(new Tea);
66 }
67 
68 
69 
70 int main() {
71 
72     test01();
73     return 0;
74 }
复制代码

 

posted on   Love&Share  阅读(72)  评论(0编辑  收藏  举报

编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示