某出版社发行图书和光盘,利用继承设计管理出版物的类。
要求如下:建立一个基类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;
}
Sample Input
文学作品 西游记 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{
private:
int page;
public:
Book(){}
void inputdata(){
Publication::inputdata();
cin>>page;
}
void display(){
Publication::display();
cout<<"pages:"<<page<<endl;
}
};
class CD:public Publication{
private:
Time playtime;
public:
CD(){}
CD(int hour,int minute,int second,string title,string name,float price,int year,int month,int day):playtime(hour,minute,second),Publication(title,name,price,year,month,day){}
void display(){
Publication::display();
cout<<"playtime(h:m:s) "<<playtime.hour<<":"<<playtime.minute<<":"<<playtime.second<<endl;
}
};