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++;//使下一个数组使用下一个指针
	}
	
	
	
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值