#include"inherit_08.h"
class AbstractDrinking
{
public:
// 烧水
virtual void Boil() = 0;
// 冲泡饮料
virtual void Brew() = 0;
// 倒入水中
virtual void PourInCup() = 0;
// 加入佐料
virtual void PutSomething() = 0;
// 规定流程
void make_drink()
{
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 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_reference(AbstractDrinking & obj)
{
obj.make_drink();
cout << endl;
}
// 业务函数(指针调用)
void doWork_pointer(AbstractDrinking* obj)
{
obj->make_drink();
delete obj;// 记得删除指针
cout << endl;
}
void inherit_08_test_01()
{
// 引用调用
Tea t;
doWork_reference(t);
// 指针调用
AbstractDrinking* c = new Coffee;// 父类指针指向子类
doWork_pointer(c);
}
55 C++ 多态实例2 制作饮料
最新推荐文章于 2024-06-14 14:40:57 发布