/*
1、定義壹個媒體Media類
2、它有兩個派生類:圖書Book類、光盤CD類
3、其中,圖書有名稱、銷售數量、ISBN編號等屬性
4、光盤有名稱、銷售數量、制作方等屬性
5、要求:
1)設計上述三個類的相關屬性;
2)利用多態性的概念,分別以虛函數的形式完成對圖書和光盤信息的顯示
3)編寫壹個普通函數f(),顯示出銷售數量超過1000的圖書和光盤
4)在main函數中進行測試。
*/
#include <vector>
#include <string>
#include <iostream>
using namespace std;
class Media
{
public:
Media(){};
~Media(){};
virtual void Init(string name, int number)
{
m_Name = name;
m_Number = number;
};
virtual int GetNumber()
{
return m_Number;
}
virtual void Display()
{
cout<<"name: "<<m_Name<<endl;
cout<<"namber: "<<m_Number<<endl;
}
protected:
string m_Name;
int m_Number;
};
class Book : public Media
{
public:
Book(){};
~Book(){};
void Init(string name, int number, string ISBN)
{
Media::Init(name, number);
m_ISBN = ISBN;
};
void Display()
{
Media::Display();
cout<<"ISBN: "<<m_ISBN<<endl;
}
private:
string m_ISBN;
};
class CD : public Media
{
public:
CD(){};
~CD(){};
void Init(string name, int number, string Author)
{
Media::Init(name, number);
m_Author = Author;
};
void Display()
{
Media::Display();
cout<<"author: "<<m_Author<<endl;
}
private:
string m_Author;
};
int main()
{
// 添加書籍和光盤
Book *b1 = new Book();
Book *b2 = new Book();
Book *b3 = new Book();
b1->Init("book1", 100, "ISBN100");
b2->Init("book2", 1000, "ISBN1000");
b3->Init("book3", 10000, "ISBN10000");
CD *cd1 = new CD;
CD *cd2 = new CD;
CD *cd3 = new CD;
cd1->Init("cd1", 100, "author100");
cd2->Init("cd2", 1000, "author1000");
cd3->Init("cd3", 10000, "author10000");
vector<Media *> vectMedia;
vectMedia.push_back(b1);
vectMedia.push_back(b2);
vectMedia.push_back(b3);
vectMedia.push_back(cd1);
vectMedia.push_back(cd2);
vectMedia.push_back(cd3);
// 顯示部分(銷售數量大於1000)
for (int i=0; i<vectMedia.size(); i++)
{
if (vectMedia[i]->GetNumber() >= 1000)
{
cout<<"》》》銷售量大於1000的書籍或光盤《《《"<<endl;
vectMedia[i]->Display();
}
}
return 0;
}
// 運行效果見圖示