#include<iostream>
using namespace std;
//多态案例2:制作音频
class abstractDrinking
{
public:
//注水
virtual void Boil() = 0;
//冲泡
virtual void Brew() = 0;
//倒入杯中
virtual void Pour() = 0;
//加入辅料
virtual void Putsth() = 0;
//如果你的函数谜之不能使用virtual,可能是忘记写();
//制作音
void makedrink()
{
Boil();
Brew();
Pour();
Putsth();
}
};
class coffee:public abstractDrinking
{
public:
//注水
virtual void Boil()
{
cout << "煮农夫山泉" << endl;
}
//冲泡
virtual void Brew()
{
cout << "冲泡咖啡" << endl;
}
//倒入杯中
virtual void Pour()
{
cout << "导入xx杯中" << endl;
}
//加入辅料
virtual void Putsth()
{
cout << "加入糖和牛奶" << endl;
}
};
class tea :public abstractDrinking
{
public:
//注水
virtual void Boil()
{
cout << "煮泉阳泉" << endl;
}
//冲泡
virtual void Brew()
{
cout << "冲泡茶叶" << endl;
}
//倒入杯中
virtual void Pour()
{
cout << "导入xx杯中" << endl;
}
//加入辅料
virtual void Putsth()
{
cout << "加入柠檬枸杞" << endl;
}
};
void doWork(abstractDrinking* abs)//形参:abstractDrinking* abs
{
abs->makedrink();
delete abs;
}
void test01()
{
doWork(new coffee);//实参:new coffee. 即:abstractDrinking* abs=new coffee;
}
void test02()
{
doWork(new tea);
}
int main() {
test01();
test02();
system("pause");
return 0;
}
想喝咖啡就点咖啡, 想饮茶就点茶, 反正, 都在一台咖啡机上.
也就是说, 接口都一样.
doWork函数, 先指向父类的函数, 父类的函数是虚的, 需要指向子类函数. (先上后下)
abstractDrinking* abs=new coffee;