在多态中,通常父类中的虚函数的实现是毫无意义,主要是调用子类重写的内容。
因此可以将虚函数改为纯虚函数。virtual 返回值类型 函数名(参数列表)=0; 该类也成为抽象类(无法实例化对象;子类必须重写抽象类中的纯虚函数,否则子类也属于抽象类)。
代码示例:使用相同的接口(makeDrink),完成不同的功能(只需在子类中重写父类的虚函数便可)。
#include<iostream>
using namespace std;
//多态案例2——制作饮品
class AbstractDrinking
{
public:
//煮水
virtual void Boil() = 0;
//冲泡
virtual void Brew() = 0;
//倒入杯子中
virtual void WaterInCup() = 0;
//加入辅料
virtual void PutSomething() = 0;
void makeDrink()
{
Boil();
Brew();
WaterInCup();
PutSomething();
}
};
class coffe :public AbstractDrinking
{
//煮水
virtual void Boil()
{
cout << "煮水" << endl;
}
//冲泡
virtual void Brew() {
cout << "冲泡咖啡" << endl;
}
//倒入杯子中
virtual void WaterInCup()
{
cout << "倒入杯中" << endl;
}
//加入辅料
virtual void PutSomething()
{
cout << "倒入牛奶和糖" << endl;
}
};
//制作茶水
class tea :public AbstractDrinking
{
//煮水
virtual void Boil()
{
cout << "煮农夫山泉" << endl;
}
//冲泡
virtual void Brew() {
cout << "冲泡茶叶" << endl;
}
//倒入杯子中
virtual void WaterInCup()
{
cout << "倒入杯中" << endl;
}
//加入辅料
virtual void PutSomething()
{
cout << "倒入柠檬" << endl;
}
};
void doWork(AbstractDrinking *abs)
{
abs->makeDrink();
//释放
delete abs;
}
void test01()
{
//制作咖啡
doWork(new coffe);//父类的对象或者指针指向子类
cout << "--------------" << endl;
doWork(new tea);
}
int main()
{
test01();
system("pause");
return 0;
}
运行结果: