C++Note 纯虚函数和抽象类 案例2:制作饮品
多态中,通常父类中虚函数的实现没有意义 主要都是调用子类重写的内容
因此可以将虚函数改为纯虚函数
纯虚函数语法:
virtual 返回值类型 函数名 (参数列表) = 0;
当类中有了纯虚函数,这个类也称为抽象类
抽象类特点:
无法实例化对象
子类必须重写抽象类中的纯虚函数 否则也属于抽象类
案例:
制作饮品的大致流程为: 煮水 - 冲泡 倒入杯中 加入辅料
利用多态实现 提供抽象制作饮品基类 提供子类制作咖啡和茶叶
1 #include <iostream> 2 using namespace std; 3 class AbstractDrinking//抽象类 4 { 5 public: 6 //煮水 7 virtual void Boil() = 0;//纯虚函数(纯虚函数子类必须重写),虚函数不用重写 virtual void Boil(){} 8 //冲泡 9 virtual void Brew() = 0; 10 //倒入杯中 11 virtual void PourInCup() = 0; 12 //加入辅助佐料 13 virtual void PutSomeThing() = 0; 14 //制作饮品 15 void makeDrink() 16 { 17 Boil(); 18 Brew(); 19 PourInCup(); 20 PutSomeThing(); 21 } 22 }; 23 //制作咖啡 24 class Coffee:public AbstractDrinking 25 { 26 public: 27 //煮水 28 virtual void Boil() 29 { 30 cout << "煮水" << endl; 31 } 32 //冲泡 33 virtual void Brew() 34 { 35 cout << "冲泡茶叶" << endl; 36 } 37 //倒入杯中 38 virtual void PourInCup() 39 { 40 cout << "倒入杯中" << endl; 41 } 42 //加入辅助佐料 43 virtual void PutSomeThing() 44 { 45 cout << "加入柠檬" << endl; 46 } 47 }; 48 class Tea :public AbstractDrinking 49 { 50 public: 51 virtual void Boil() 52 { 53 cout << "煮山泉水" << endl; 54 } 55 //冲泡 56 virtual void Brew() 57 { 58 cout << "冲泡咖啡" << endl; 59 } 60 //倒入杯中 61 virtual void PourInCup() 62 { 63 cout << "倒入杯中" << endl; 64 } 65 //加入辅助佐料 66 virtual void PutSomeThing() 67 { 68 cout << "加入牛奶和糖" << endl; 69 } 70 }; 71 //制作饮品 72 void doWork(AbstractDrinking* abs) 73 { 74 abs->makeDrink(); 75 delete abs;//堆区数据释放 76 } 77 void test() 78 { 79 //制作咖啡 80 doWork(new Coffee); 81 cout << "----------------" << endl; 82 doWork(new Tea); 83 } 84 int main() 85 { 86 test(); 87 system("pause"); 88 return 0; 89 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)