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 280Sample 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; } };