PTA:7-17 饮料的加工时间
一个茶吧提供三类饮料:茶、咖啡和牛奶。它们的加工时间有所不同,其中本地茶每份要50秒,其它茶要20秒;现磨咖啡要加120秒,其它咖啡加20秒;牛奶每份10秒。
给出下面的基类框架:
Class Drink
{
protected:
int NO; //编号
int amount; //数量
public:
virtual void display()=0;//输出提供时间
}
以Drink为基类,构建出Tea, Coffee和Milk三个类。
生成上述类,并编写主函数,要求主函数中有一个基类Drink指针数组,数组元素不超过10个。
Drink *pd[10];
主函数根据输入的信息,相应建立Tea, Coffee或Milk类对象,并给出收费。
输入格式:每个测试用例占一行,每行给出饮料的基本信息,第一个为饮料的类型,茶为1,咖啡为2,牛奶为3。接下来是申请的编号(100-999),然后是数量。对于茶叶来说,接下来输入一个地区代码,其中1代表本地。对于咖啡来说,接下来要输入一个加工代码,其中1代表现磨。最后一行为0。 要求输出编号和加工时间。
提示:应用虚函数实现多态
输入样例:
1 106 3 1
1 103 2 2
3 109 1
2 107 2 1
2 232 3 29
0
输出样例
106 150
103 40
109 10
107 240
232 60
#include<iostream>
using namespace std;
class Drink//基类,饮料
{
protected:
int NO;
int amount;
public:
virtual void display()=0;//纯虚函数
};
class tea:public Drink//衍生类,茶
{
int second;
int dm;//成员地区代码,下同
public:
tea(int,int,int);
virtual void display()//引用基类函数,下同
{
if(dm==1)
second=50;
else
second=20;
cout<<NO<<" "<<second*amount<<endl;
}
};
tea::tea(int no,int num,int k)
{
NO=no;
amount=num;
dm=k;
}
class coffee:public Drink
{
int second;
int dm;
public:
coffee(int,int,int);
virtual void display()
{
if(dm==1)
second=120;
else
second=20;
cout<<NO<<" "<<second*amount<<endl;
}
};
coffee::coffee(int no,int num,int k)
{
NO=no;
amount=num;
dm=k;
}
class mike:public Drink
{
int second=10;
public:
mike(int,int);
virtual void display(){cout<<NO<<" "<<second*amount<<endl; }
};
mike::mike(int no,int num)
{
NO=no;
amount=num;
}
int main()
{
Drink *pd[10];//指向基类的指针数组
int type,no,num,k,count=0;
while(1)
{
cin>>type;
if(type==0)//0结束
break;
switch(type)//用switch判断饮料类型
{
case 1:
cin>>no>>num>>k;
pd[count]=new tea(no,num,k);//将指针指向茶类,顺便初始化,下同
break;
case 2:
cin>>no>>num>>k;
pd[count]=new coffee(no,num,k);
break;
case 3:
cin>>no>>num;
pd[count]=new mike(no,num);
break;
}
pd[count]->display();//所有类都有这个所有直接调用即可
count++;//使下一个数组使用下一个指针
}
}