邮局提供两种期刊的订阅:杂志和报纸。
给出下面基类的框架:
class Periodical
{
protected:
string title; //名称
public:
virtual void display()=0;//打印收费
}
以Periodical为基类,构建Magazine和Newspaper类。
生成上述类并编写主函数,要求主函数中有一个基类Periodical指针数组,数组元素不超过10个。
Periodical *pp[10];
主函数根据输入的信息,相应建立Magazine, Newspaper类对象,对于Magazine给出订阅期数和每期价格,对于Newspaper给出订阅周数,每周出版次数和每份价格。
输入格式:每个测试用例占一行,第一项为类型,1为Magazine,2为Newspaper,第二项是名称,第三项是单价,Magazine的第四项是期数,Newspaper的第四项是订阅周数,第五项是每周出版次数。
输出时,依次打印各期刊的名称和收费(小数点后保留一位)。
输入样例:
1 AAA 12.8 6
1 BB 15 3
2 CCCC 2.1 16 3
2 DD 0.7 55 7
1 EEE 18 3
0
输出样例:
AAA 76.8
BB 45.0
CCCC 100.8
DD 269.5
EEE 54.0
时间限制
1000 ms
内存限制
65536 kB
代码长度限制
8192 B
判题程序
Standard
来源
多态
#include<iostream>
#include<iomanip>
using namespace std;
class Periodical
{
protected:
string title; //名称
float price;
int amount;
public:
Periodical(string t,float p,int a):title(t),price(p),amount(a){
}
virtual void display()=0;//打印收费
};
class Magazine:public Periodical
{
public:
Magazine(string t,float p,int a):Periodical(t,p,a){
}
void display();
};
void Magazine::display()
{
cout<<title<<" "<<setiosflags(ios::fixed)<<setprecision(1)<<price*amount<<endl;
}
class Newspaper:public Periodical
{
int week;
public:
Newspaper(string t,float p,int a,int w):Periodical(t,p,a){week=w;
}
void display();
};
void Newspaper::display()
{
cout<<title<<" "<<setiosflags(ios::fixed)<<setprecision(1)<<price*amount*week<<endl;
}
int main()
{
Periodical *pp[10];
int type,amount,week,i=0;
string name;
float price;
cin>>type;
while(type!=0)
{
cin>>name>>price>>amount;
if(type==1)
{
pp[i]=new Magazine(name,price,amount);
pp[i++]->display();
}
else
{
cin>>week;
pp[i]=new Newspaper(name,price,amount,week);
pp[i++]->display();
}
cin>>type;
}
return 0;
}