某出版社系统发行图书和磁带,利用继承设计管理出版物的类。要求如下:建立一个基类publication存储出版物的标题titel、出版物的名称name、单价price、及出版日期date、用book和tape类分别管理图书和磁带。他们都是从publication派生。book类具有保存图书页数的数据成员page,tape类具有保存播放时间的数据成员 playtime,每一个类都有构造函数、析够函数,且都有用于从键盘获取数据的成员函数 inputdate(),用语显示数据的成员函数 display()。


// test.cpp : 定义控制台应用程序的入口点。
//

#include<iostream>
#include<string>

using namespace std;

class Date{
private:
	int year;
	int month;
	int day;
public:
	Date(int Y, int M, int D){
		year=Y;month=M;day=D;
	}
	~Date(){}					// 因为没有自主申请的内存空间,所以写一个空的析构函数
	void setYear(int x){ year=x;}
	void setMonth(int x){ month=x;}
	void setDay(int x){ day=x;}
	int getYear(){return year;}
	int getMonth(){return month;}
	int getDay(){return day;}
};

class Publication{
private:
	string title;		// 出版物标题
	string name;		// 出版物名称
	int price;			// 单价
	Date date;			// 出版日期
public:
	Publication(string til, string n, int p,int Y, int M, int D):date(Y,M,D){
		title=til;
		name=n;
		price=p;
	}
	~Publication(){};
	void setTitle(string til){ title=til;}
	void setName(string n){ name=n;}
	void setPrice(int p){ price=p;}
	void setDate(int Y, int M, int D){
		date.setYear(Y);date.setMonth(M);date.setDay(D);
	};
	string getTitle(){ return title;}
	string getName(){ return name;}
	int getPrice(){ return price;}
	Date getDate(){ return date;}

	virtual void inputData(){
		int Y,M,D;
		cout<<"Title: ";cin>>title;
		cout<<"name : ";cin>>name;
		cout<<"price:  ";cin>>price;
		cout<<"year : ";cin>>Y;
		cout<<"month: ";cin>>M;
		cout<<"day  :";cin>>D;
		setDate(Y,M,D);
	}
	
	void display(){
		cout<<"Title: "<<title<<endl;
		cout<<"name : "<<name<<endl;
		cout<<"price: "<<price<<endl;
		cout<<"date : "<<date.getYear()<<"/"<<date.getMonth()<<"/"<<date.getDay()<<endl;
	}


};
class Book:public Publication{
private:
	int page;
public:
	Book(int pag,string til, string n, int p,int Y, int M, int D):Publication(til,n,p,Y,M,D){
		page=pag;
	}
	~Book(){}
	void setPage(int x){ page=x;}
	int getPage(){ return page;}
	void inputData(){
		Publication::inputData();
		cout<<"page : ";cin>>page;	
	}
	void display(){
		Publication::display();
		cout<<"page : "<<page<<endl;
	}
};
class Tape:public Publication{
private:
	int playtime;
public:
	Tape(int pl,string til,string n,int p,int Y,int M,int D):Publication(til,n,p,Y,M,D){
		playtime=pl;
	}
	~Tape(){}
	void setPlaytime(int t){ playtime=t;}
	int getPlaytime(){ return playtime;}
	void inputData(){
		Publication::inputData();
	}
	void display(){
		Publication::display();
		cout<<"playtime : "<<playtime<<endl;
	}
}

void cut(){
	for(int i=0;i<20;i++)
		cout<<"-";
	cout<<endl;
}

int main()
{
	Book *pu =new Book(23,"教育类","C++程序设计",35,2014,10,1);
	pu->display();
	cut();
	pu->setDate(2013,6,10);
	pu->display();
	cut();
	pu->inputData();
	pu->display();


	system("pause");
	return 0;
}