以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 C/C++编程思想 』  (http://bbs.xml.org.cn/list.asp?boardid=61)
----  求助,谁帮我做一个C++的题目啊  (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=62660)


--  作者:cucumberhx
--  发布时间:5/16/2008 12:57:00 AM

--  求助,谁帮我做一个C++的题目啊
[color=#00FFFF]设计一个出版物基类publication,存储出版物的标题title和价格price。派生图书类book和音像品类tape,分别添加属性页数page和播放时间time。三个类都有getdata()和putdata()函数,用来通过键盘从用户获得输入数据和显示数据。在驱动程序main()中创建指向publication的指针数组,在循环中询问用户的输入内别(书还是磁带),然后用new创建相应类的对象保存数据,最后将指向该对象的指针存入数组。当用户输入所有的数据后,用循环结构显示所有输入的书和磁带的信息。并添加相应的函数实现修改已有出版物的价格和删除出版物的功能。编写完整的程序进行演示[/color]
--  作者:BirdOnSky
--  发布时间:5/23/2008 8:33:00 PM

--  
#include <string>
#include <vector>
#include <iostream>

using namespace std;

class Publication
{
   protected:
      string title;
      float price;

   public:
      Publication() : title(""), price(0) {}
      virtual void get()=0;
      virtual void put() const =0;
      virtual void setPrice(float p) {price=p;}
};

class Book : public Publication
{
   private:
      int page;
   public:
      Book() : page(0), Publication() {}
      void get()
      {
         cout << "Title: "; while(title=="") getline(cin, title,'\n');
         cout << "Page, Price:  "; cin >> page >> price;
      }
      void put() const {cout << title << '\t' << page << '\t' << price << endl;}
};

class Tape : public Publication
{
   private:
      float time;
   public:
      Tape() : time(0.0), Publication() {}
      void get()
      {
         cout << "Title: "; while(title=="") getline(cin,title);
         cout << "Time, Price: "; cin >> time >> price;
      }
      void put()const {cout << title << '\t' << time << '\t' << price << endl;}
};

typedef enum {BOOK=1, TAPE=2} Media;

int main(int argc, char* argv[])
{
   vector<Publication*> pub;

   cout << "MediaType: Book/1 , Tape/2,  exit(0) ; ";

   int type;
   while(cin>>type && type)
      pub.push_back( Media(type) == BOOK? static_cast<Publication*>(new Book) : new Tape);

   for_each(pub.begin(), pub.end(), mem_fun(&Publication::get));
   for_each(pub.begin(), pub.end(), mem_fun(&Publication::put));

   return 0;
}


--  作者:brained
--  发布时间:5/27/2008 4:05:00 PM

--  
........................
--  作者:netjian
--  发布时间:6/12/2008 12:47:00 PM

--  
BirdOnSky真是热心啊。
赞~
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
46.875ms