習題四第10題

某出版社系統發行圖書和磁帶,利用繼承設計管理出版物的類。要求以下:創建一個基類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;
}
相關文章
相關標籤/搜索