Problem Description
某出版社发行图书和光盘,利用继承设计管理出版物的类。
要求如下:建立一个基类Publication存储出版物的标题title、出版物名称name、单价price及出版日期date;用Book和CD类分别管理图书和光盘,它们都从Publication类派生;Book类具有保存图书页数的数据成员page,CD类具有保存播放时间的数据成员playtime;每个类都有构造函数、析构函数,且都有用于从键盘获取数据的成员函数inputData()和用于显示数据的成员函数display()。
请完成下面的程序:
#include<iostream>
#include<string>
using namespace std;
struct Date{//年月日
int year;
int month;
int day;
Date(int y=0,int m=0,int d=0){year=y;month=m;day=d;}
~Date(){}
};
struct Time{//时分秒
int hour;
int minute;
int second;
Time(int h=0,int m=0,int s=0){hour=h;minute=m;second=s;}
~Time(){}
};
class Publication{
private:
string title;//出版物的标题title
string name;//出版物的名称name
float price;//出版物的单价price
Date date; //出版日期date
public:
Publication(string t="",string n="",float p=0,int h=0,int m=0,int s=0):date(h,m,s){
title=t;name=n;price=p;}
~Publication(){}
void inputdata(){
cin>>title;
cin>>name;
cin>>price;
cin>>date.year>>date.month>>date.day;
}
void display(){
cout<<"*****display*****"<<endl;
cout<<"title:"<<title<<endl;
cout<<"name:"<<name<<endl;
cout<<"price:"<<price<<endl;
cout<<"year-month-day:"<<date.year<<"-"<<date.month<<"-"<<date.day<<endl;
}
};
//你的代码将被嵌在这里
int main()
{
Book b;
CD c(1,2,3,"郎朗","肖邦钢琴协奏曲",61,2018,8,1);
b.inputdata();
b.display();
c.display();
return 0;
}
Input Description
文学作品
西游记
28
2018 1 8
280
Sample Output
*****display*****
title:文学作品
name:西游记
price:28
year-month-day:2018-1-8
pages:280
*****display*****
title:郎朗
name:肖邦钢琴协奏曲
price:61
year-month-day:2018-8-1
playtime(h:m:s) 1:2:3
解题代码
class Book:public Publication{
int page;
public:
Book(){}
void inputdata()
{
Publication::inputdata();
cin >> page;
}
void display()
{
Publication::display();
cout <<"pages:" << page <<endl;
}
};
class CD:public Publication{
Time playtime;
public:
CD(int hour,int minute,int second,string title,string name,float price,int year,int month,int day):Publication(title,name,price,year,month,day),playtime(hour,minute,second){}
void display()
{
Publication::display();
cout <<"playtime(h:m:s) " << playtime.hour << ":" << playtime.minute << ":" << playtime.second << endl;
}
};