本文主要是介绍C++类与对象笔记十四:多态五:案例-制作饮品,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
案例描述:
制作饮品的大致流程为:煮水-冲泡-倒入杯中-加入辅料
利用多态技术实现本案例,提供抽象类制作饮品基类,提供子类制作咖啡和茶叶。
按照我们之前的总结:
多个类:可以抽象出共同的父类, 父类中写所有对象共有的方法,但是不知道如何写父类中这个方法。
此时抽象类中包含纯虚函数即可:类名:AbstractDrinking。两者都有的过程或者说操作,可以抽象为方法,这些方法名可以叫:煮水、冲泡、倒入杯中、加调料。不同的饮品,这四个操作不同。因此写四个纯虚函数。
//抽象制作饮品
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();}
};
最后要把这四个纯虚函数代表的动作,流程化,统一执行,这个我们指导怎么写,因此,最后我们写一个普通的成员函数MakeDrink()。
写子类:
//制作咖啡
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 Tea : 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* drink) {drink->MakeDrink();delete drink;
}void test01() {DoWork(new Coffee);cout << "--------------" << endl;DoWork(new Tea);
}
动态多态关键:本质:形参传入:
AbstractDrink* drink = new Coffee;
AbstractDrink* drink = new Tea;
如果想制作其他饮品,那么只要继续增加一个新类就可以。然后业务修改一下即可,无需修改类和整体设计。
我们应该封装一些固定,不变的,稳定的、确定的成员;把不确定的,有可能改变的成员抽象为抽象成员、抽象类,留给子类去实现。
这篇关于C++类与对象笔记十四:多态五:案例-制作饮品的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!