#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
//纯虚函数
class AbstractDrinking
{
public:
//煮水
virtual void Boil() = 0;
//冲泡
virtual void Brew() = 0;
//倒入杯中
virtual void PourInCup() = 0;
//加入辅料
virtual void PuSomething() = 0;
//制作饮品
void makeDrink()
{
Boil();
Brew();
PourInCup();
PuSomething();
}
};
//制作咖啡
class coffee :public AbstractDrinking
{
public:
//煮水
virtual void Boil()
{
cout << " 1.煮农夫山泉 " << endl;
}
//冲泡
virtual void Brew()
{
cout << " 2.冲泡咖啡 " << endl;
}
//倒入杯中
virtual void PourInCup()
{
cout << " 3.倒入杯中 " << endl;
}
//加入辅料
virtual void PuSomething()
{
cout << " 4.加入牛奶或者糖 " << endl;
cout << " <<给阿姨倒杯卡布奇诺>> " << endl;
}
};
//制作茶
class Tea :public AbstractDrinking
{
public:
//煮水
virtual void Boil()
{
cout << " 1.煮矿泉水 " << endl;
}
//冲泡
virtual void Brew()
{
cout << " 2.冲泡铁观音 " << endl;
}
//倒入杯中
virtual void PourInCup()
{
cout << " 3.倒入杯中 " << endl;
}
//加入辅料
virtual void PuSomething()
{
cout << " 4.加入枸杞 " << endl;
cout << " 铁观音制作完毕 " << endl;
}
};
//引用的方式
//void dowork(AbstractDrinking & abs)
//{
// abs.makeDrink();
//}
//void test()
//{
// coffee c;
// dowork(c);//父类指针或者引用指向子类的对象
//}
//指针的方式
void dowork(AbstractDrinking * abs) //AbstractDrinking * abs = new coffee;
{
abs->makeDrink();
delete abs;//堆区的数据由自己开辟自己释放
}
void test1()
{
cout << " 制作茶: " << endl;
dowork(new Tea);//父类指针或者引用指向子类的对象
cout << endl;
cout << " 分割线 ------ 分割线 " << endl;
cout << endl;
cout << " 制作咖啡: " << endl;
dowork(new coffee);
}
int main()
{
//test();
test1();
system("pause");
return 0;
}
运行结果:
案例总结:
1.纯虚函数不能实例化对象
2.父类指针或者引用指向子类的对象( AbstractDrinking * abs = new coffee; )