CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

百分之百是一个特别简单的问题~!看得我的眼都花了~!帮忙呀~!

楼主qfknet(┏●●┓)2003-02-04 20:33:26 在 C/C++ / C语言 提问

今天闲的没事,把一本叫做《21天学会C++》上的一个程序运行一下,出了一大堆错  
  大家看一下~!~!  
   
  #include<iostream>  
  using   namespace   std;  
   
  //part  
   
  class   Part  
  {  
  public:  
  Part():itsPartNumber(1){}  
  Part(int   PartNumber):itsPartNumber(PartNumber){}  
          virtual   ~Part(){};  
  int   GetPartNumber()const{return   itsPartNumber;}  
  virtual   void   Display()const=0;  
  private:  
  int   itsPartNumber;  
  };  
   
  void   Part::Display()const  
  {  
  cout<<"\nPart   Number:"<<itsPartNumber<<endl;  
  }  
   
  //car   Part  
   
  class   CarPart:   public   Part  
  {  
  public:  
  CarPart():itsModelYear(94){}  
  CarPart(int   year,int   PartNumber);  
  virtual   void   Display()const  
  {  
  Part::Display();  
  cout<<"Model   year"<<itsModelYear<<endl;  
  }  
  private:  
  int   itsModelYear;  
  };  
   
  CarPart::CarPart(int   year,int   PartNumber):  
  itsModelYear(year),  
  Part(PartNumber)  
  {}  
   
  //Air   Plane   Part  
   
  class   AirPlanePart:   public   Part  
  {  
  public:  
  AirPlanePart():itsEngineNumber(1){};  
  AirPlanePart(int   EngineNumber,int   PartNumber);  
  virtual   void   Display()   const  
  {  
  Part::Display();  
  cout<<"Engine   No.   :"<<itsEngineNumber<<endl;  
  }  
  private:  
  int   itsEngineNumber;  
  };  
   
  AirPlanePart::AirPlanePart(int   EngineNumber,int   PartNumber):  
  itsEngineNumber(EngineNumber),  
  Part(PartNumber)  
  {}  
   
  //Part   Node  
   
  class   PartNode  
  {  
  public:  
  PartNode(Part   *);  
  ~PartNode();  
  void   SetNext(PartNode   *node){itsNext=node;}  
  PartNode   *GetNext()const;  
  Part   *GetPart()const;  
  private:  
  Part   *itsPart;  
  PartNode   *itsNext;  
  };  
   
  //Part   Node   Implementations   ...  
   
  PartNode::PartNode(Part   *pPart):  
  itsPart(pPart),  
  itsNext(0)  
  {}  
   
  PartNode::~PartNode()  
  {  
  delete   itsPart;  
  itsPart=0;  
  delete   itsNext;  
  itsNext=0;  
  }  
   
  //Return   NULL   if   no   next   PartNode  
   
  PartNode   *PartNode::GetNext()const  
  {  
  return   itsNext;  
  }  
   
  Part   *PartNode::GetPart()const  
  {  
  if(itsPart)  
  return   itsPart;  
  else  
  return   NULL;  
  }  
   
  //Part   list  
   
  class   PartsList  
  {  
  public:  
  PartsList();  
  ~PartsList();  
  Part   *Find(int   &Position,int   PartNumber)const;  
  int   GetCound()const{return   itsCount;}  
  Part   *GetFirst()const;  
  void   Insert(Part   *);  
  void   Iterate()const;  
  Part   *Operator[](int)const;  
  private:  
  PartNode   *pHead;  
  int   itsCount;  
  };  
   
  //Implementations   for   lists...  
   
   
  PartsList::PartsList():  
  pHead(0),  
  itsCount()  
  {}  
   
  void   Part::Display()const  
  {  
  cout<<"\nPart   Number:   "<<itsPartNumber<<endl;  
  }  
   
  //Car   Part  
   
  class   CarPart   :   public   Part  
  {  
  public:  
  CarPart():itsModeYear(94){}  
  CarPart(int   year,int   PartNumber);  
  virtual   void   Display()const  
  {  
  Part::Display();  
  cout<<"Mode   Year:   "<<itsModelYear<<endl;  
  }  
  private:  
  int   itsModelYear;  
  };  
   
  CarPart::CarPart(int   year,int   PartNumber):  
  itsModelYear(year),  
  Part(PartNumber)  
  {}  
   
  //Air   Plane   Part  
   
  class   AirPlanePart:   public   Part  
  {  
  public:  
  AirPlanePart():itsEngineNumber(1){};  
  AirPlanePart(int   EngineNumber,int   PartNumber);  
  virtual   void   Display()const  
  {  
  Part::Display();  
  cout<<"Engine   No.:   "<<isEngineNumber<<endl;  
  }  
  private:  
  int   itsEngineNumber;  
  };  
   
  AirPlanePart::AirPlanePart(int   EngineNumber,int   PartNumber):  
  itsEngineNumber(EngineNumber),  
  Part(PartNumber)  
  {}  
   
  //Part   Node  
   
  class   PartNode  
  {  
  public:  
  PartNode(Part   *);  
  ~PartNode();  
  void   SetNext(PartNode   *node){itsNext=node;}  
  PartNode   *GetNext()const;  
  Part   *GetPart()const;  
  private:  
  Part   *itsPart;  
  PartNode   *itsNext;  
  };  
   
  PartNode::PartNode(Part   *pPart):  
  itsPart(pPart),  
  itsNext(0)  
  {}  
   
  PartNode::~PartNode()  
  {  
  delete   itsPart;  
  itsPart=0;  
  delete   itsNext;  
  itsNext=0;  
  }  
   
  PartNode   *PartNode::GetNext()const  
  {  
  return   itsNext;  
  }  
   
  Part   *PartNode::GetPart()const  
  {  
  if(itsPart)  
  return   itsPart;  
  else  
  return   NULL;  
  }  
   
  //Part   list  
   
  class   partsList  
  {  
  public:  
  PartsList();  
  ~PartsList();  
  Part   *Find(int   &Position,int   PartNumber)const;  
  int   GetCount()const{return   itsCount;}  
  Part   *GetFirst()const;  
  void   Insert(Part   *);  
  void   Iterate()const;  
  Part   *Operator[](int)const;  
  private:  
  PartNode   *pHead;  
  int   itsCount;  
  };  
   
  PartsList::PartsList():  
  pHead(0),  
  itsCount(0)  
  {}  
   
  PartsList::~PartsList  
  {  
  delete   pHead;  
  }  
   
  Part   *PartsList::GetFirst()const  
  {  
  if(pHead)  
  return   pHead->GetPart();  
  else  
  return   NULL;  
  }  
   
  Part   *PartsList::Operater[](int   offset)const  
  {  
  PartNode   *pNode=pHead;  
  if(!pHead)  
  return   NULL;  
  if(offset>itsCount)  
  return   NULL;  
  for(int   i=0;   i<offset;   i++)  
  pNode=pNode->GetNext();  
  return   pNode->GetPart();  
  }  
   
  Part   *PartsList::Find(int   &Position,int   PartNumber)const  
  {  
  PartNode   *pNode=0;  
  for(pNode=pHead,Pssition=0;pNode!=NULL;pNode=pNode->GetNext,Position++)  
  {  
  if(pNode->GetPart()->GetPartNumber()==PartNumber)  
  break;  
  }  
  if(pNode==NULL)  
  return   NULL;  
  else  
  return   pNode->GetPart();  
  }  
   
  void   PartsList::Iterate()const  
  {  
  if(!pHead)  
  return;  
  PartNode   *pNode=pHead;  
  do  
  pNode->GetPart()->Display();  
  while(pNode=pNode->GetNext());  
  }  
   
  void   PartsList::Insert(Part   *pPart)  
  {  
  PartNode   *pNode=new   PartNode(pPart);  
  PartNode   *pCurrent=pHead;  
  PartNode   *pNext=0;  
  int   New=pPart->GetPartNumber();  
  int   Next=0;  
  itsCount++;  
   
  if(!pHead)  
  {  
  pHead=pNode;  
  return;  
  }  
   
  if(pHead->GetPart()->GetPartNumber()>New)  
  {  
  pNode->SetNext(pHead);  
  pHead=Node;  
  return;  
  }  
   
  for(;;)  
  {  
  if(!pCurrent->GetNext())  
  {  
  pCurrent->SetNext(pNdoe);  
  return;  
  }  
  pNext=pCurrent->GetNext();  
  Next=pNext->GetPart()->GetPartNumber();  
  if(Next>New)  
  {  
  pCurrent->SetNext(pNode);  
  pNode->SetNext(pNext);  
  return;  
  }  
  pCurrent=pNext;  
  }  
  }  
   
  int   main()  
  {  
  PartsList   pl;  
  Part   *pPart=0;  
  int   PartNumber;  
  int   value;  
  int   choice;  
  while(1)  
  {  
  cout<<"(0)   Quit   (1)   Car   (2)   Plane   :   ";  
  cin>>choice;  
  if(!choice)  
  break;  
  cout<<"New   Part   Number?   :   ";  
  cin>>PartNumber;  
  if(choice==1)  
  {  
  cout<<"Model   Year?   :   ";  
  cin>>value;  
  pPart=new   CarPlan(value,PartNumber);  
  }  
  else  
  {  
  cout<<"Engine   Number?   :   ";  
  cin>>value;  
  pPart=new   AtrPlanePart(value,PartNumber);  
  }  
  pl.Insert(pPart);  
  }  
  pl.Iterate();  
  return   0;  
  }  
  问题点数:100、回复次数:33Top

1 楼qfknet(┏●●┓)回复于 2003-02-04 20:33:41 得分 0

 
   
  --------------------Configuration:   第二周内容回顾   -   Win32   Debug--------------------  
  Compiling...  
  第二周内容回顾.cpp  
  Z:\c++\21days\第二周内容回顾\第二周内容回顾.cpp(122)   :   error   C2270:   '<Unknown>'   :   modifiers   not   allowed   on   nonmember   functions  
  Z:\c++\21days\第二周内容回顾\第二周内容回顾.cpp(122)   :   error   C2092:   array   element   type   cannot   be   function  
  Z:\c++\21days\第二周内容回顾\第二周内容回顾.cpp(137)   :   error   C2084:   function   'void   __thiscall   Part::Display(void)   const'   already   has   a   body  
  Z:\c++\21days\第二周内容回顾\第二周内容回顾.cpp(143)   :   error   C2011:   'CarPart'   :   'class'   type   redefinition  
  Z:\c++\21days\第二周内容回顾\第二周内容回顾.cpp(157)   :   error   C2084:   function   '__thiscall   CarPart::CarPart(int,int)'   already   has   a   body  
  Z:\c++\21days\第二周内容回顾\第二周内容回顾.cpp(164)   :   error   C2011:   'AirPlanePart'   :   'class'   type   redefinition  
  Z:\c++\21days\第二周内容回顾\第二周内容回顾.cpp(178)   :   error   C2084:   function   '__thiscall   AirPlanePart::AirPlanePart(int,int)'   already   has   a   body  
  Z:\c++\21days\第二周内容回顾\第二周内容回顾.cpp(186)   :   error   C2011:   'PartNode'   :   'class'   type   redefinition  
  Z:\c++\21days\第二周内容回顾\第二周内容回顾.cpp(198)   :   error   C2084:   function   '__thiscall   PartNode::PartNode(class   Part   *)'   already   has   a   body  
  Z:\c++\21days\第二周内容回顾\第二周内容回顾.cpp(204)   :   error   C2084:   function   '__thiscall   PartNode::~PartNode(void)'   already   has   a   body  
  Z:\c++\21days\第二周内容回顾\第二周内容回顾.cpp(212)   :   error   C2084:   function   'class   PartNode   *__thiscall   PartNode::GetNext(void)   const'   already   has   a   body  
  Z:\c++\21days\第二周内容回顾\第二周内容回顾.cpp(217)   :   error   C2084:   function   'class   Part   *__thiscall   PartNode::GetPart(void)   const'   already   has   a   body  
  Z:\c++\21days\第二周内容回顾\第二周内容回顾.cpp(230)   :   error   C2523:   'partsList::~PartsList'   :   destructor   tag   mismatch  
  Z:\c++\21days\第二周内容回顾\第二周内容回顾.cpp(236)   :   error   C2270:   '<Unknown>'   :   modifiers   not   allowed   on   nonmember   functions  
  Z:\c++\21days\第二周内容回顾\第二周内容回顾.cpp(236)   :   error   C2092:   array   element   type   cannot   be   function  
  Z:\c++\21days\第二周内容回顾\第二周内容回顾.cpp(242)   :   error   C2084:   function   '__thiscall   PartsList::PartsList(void)'   already   has   a   body  
  Z:\c++\21days\第二周内容回顾\第二周内容回顾.cpp(248)   :   fatal   error   C1903:   unable   to   recover   from   previous   error(s);   stopping   compilation  
  Error   executing   cl.exe.  
   
  第二周内容回顾.exe   -   17   error(s),   0   warning(s)  
  Top

2 楼edisonkun(简单代码)回复于 2003-02-04 20:55:02 得分 0

啊   看傻了!Top

3 楼SENDFREE(大西瓜)回复于 2003-02-04 21:11:41 得分 20

那些“already   has   a   body”的错误都是重复实现函数体。  
  重载运算符:operator   首字母小写。  
  Top

4 楼cyyy(源)回复于 2003-02-04 21:13:46 得分 0

盲然Top

5 楼leonhome(腐烂生存)回复于 2003-02-04 21:18:04 得分 0

同志,这么长的程序就算不做注释,也该让我知道这是干什么用的吧!Top

6 楼bryan99(我想我是海)回复于 2003-02-04 22:28:04 得分 0

无法看下去...Top

7 楼tohigh(岁月的童话.NET)回复于 2003-02-04 22:51:29 得分 0

不要看那本书了,根本是瞎编乱造。推荐看c++   primer,你会有很大收获。  
  你敲代码有点粗心,很多错误出在这上面。学c++不是一年半载的事情,要花很长时间,没有速成的方法,只有不断的看书,上机。你的代码我粗略地改了一下。另外,不管你想不想听,我还是要说,在中国纯粹做技术没有多少前途可言,经济、管理、心理学、法律方面的书有空也看一下,不要把精力都放在计算机的技术上。Top

8 楼tohigh(岁月的童话.NET)回复于 2003-02-04 22:51:48 得分 30

#include<iostream>  
  using   namespace   std;  
   
  //part  
   
  class   Part  
  {  
  public:  
  Part():itsPartNumber(1){}  
  Part(int   PartNumber):itsPartNumber(PartNumber){}  
          virtual   ~Part(){};  
  int   GetPartNumber()const{return   itsPartNumber;}  
  virtual   void   Display()const=0;  
  private:  
  int   itsPartNumber;  
  };  
   
  void   Part::Display()const  
  {  
          cout<<"\nPart   Number:"<<itsPartNumber<<endl;  
  }  
   
  //car   Part  
   
  class   CarPart:   public   Part  
  {  
  public:  
  CarPart():itsModelYear(94){}  
  CarPart(int   year,int   PartNumber);  
  virtual   void   Display()const  
  {  
  Part::Display();  
  cout<<"Model   year"<<itsModelYear<<endl;  
  }  
  private:  
  int   itsModelYear;  
  };  
   
  CarPart::CarPart(int   year,int   PartNumber):  
  itsModelYear(year),  
  Part(PartNumber)  
  {}  
   
  //Air   Plane   Part  
   
  class   AirPlanePart:   public   Part  
  {  
  public:  
  AirPlanePart():itsEngineNumber(1){};  
  AirPlanePart(int   EngineNumber,int   PartNumber);  
  virtual   void   Display()   const  
  {  
  Part::Display();  
  cout<<"Engine   No.   :"<<itsEngineNumber<<endl;  
  }  
  private:  
  int   itsEngineNumber;  
  };  
   
  AirPlanePart::AirPlanePart(int   EngineNumber,int   PartNumber):  
  itsEngineNumber(EngineNumber),  
  Part(PartNumber)  
  {}  
   
  //Part   Node  
   
  class   PartNode  
  {  
  public:  
  PartNode(Part   *);  
  ~PartNode();  
  void   SetNext(PartNode   *node){itsNext=node;}  
  PartNode   *GetNext()const;  
  Part   *GetPart()const;  
  private:  
  Part   *itsPart;  
  PartNode   *itsNext;  
  };  
   
  //Part   Node   Implementations   ...  
   
  PartNode::PartNode(Part   *pPart):  
  itsPart(pPart),  
  itsNext(0)  
  {}  
   
  PartNode::~PartNode()  
  {  
  delete   itsPart;  
  itsPart=0;  
  delete   itsNext;  
  itsNext=0;  
  }  
   
  //Return   NULL   if   no   next   PartNode  
   
  PartNode   *PartNode::GetNext()const  
  {  
  return   itsNext;  
  }  
   
  Part   *PartNode::GetPart()const  
  {  
  if(itsPart)  
  return   itsPart;  
  else  
  return   NULL;  
  }  
   
  //Part   list  
   
  class   PartsList  
  {  
  public:  
  PartsList();  
  ~PartsList(){};  
  Part   *Find(int   &Position,int   PartNumber)const;  
  int   GetCound()const{return   itsCount;}  
  Part   *GetFirst()const;  
  void   Insert(Part   *);  
  void   Iterate()const;  
  Part   *operator[](int   offset)const;  
  private:  
  PartNode   *pHead;  
  int   itsCount;  
  };  
   
   
  //Implementations   for   lists...  
   
   
  PartsList::PartsList():  
  pHead(0),  
  itsCount()  
  {}  
   
  //PartsList::~PartsList  
  //{delete   pNode;}  
   
  Part   *PartsList::GetFirst()const  
  {  
  if(pHead)  
  return   pHead->GetPart();  
  else  
  return   NULL;  
  }  
   
   
  Part   *PartsList::operator[](int   offset)const  
  {  
  PartNode   *pNode=pHead;  
  if(!pHead)  
  return   NULL;  
  if(offset>itsCount)  
  return   NULL;  
  for(int   i=0;   i<offset;   i++)  
  pNode=pNode->GetNext();  
  return   pNode->GetPart();  
  }  
   
  Part   *PartsList::Find(int   &Position,int   PartNumber)const  
  {  
  PartNode   *pNode=pHead;  
  Position=0;  
  for(;pNode!=NULL;pNode=pNode->GetNext(),Position++)  
  {  
  if(pNode->GetPart()->GetPartNumber()==PartNumber)  
  break;  
  }  
  if(pNode==NULL)  
  return   NULL;  
  else  
  return   pNode->GetPart();  
  }  
   
   
  void   PartsList::Iterate()const  
  {  
  if(!pHead)  
  return;  
  PartNode   *pNode=pHead;  
  do  
  pNode->GetPart()->Display();  
  while(pNode=pNode->GetNext());  
  }  
   
  void   PartsList::Insert(Part   *pPart)  
  {  
  PartNode   *pNode=new   PartNode(pPart);  
  PartNode   *pCurrent=pHead;  
  PartNode   *pNext=0;  
  int   New=pPart->GetPartNumber();  
  int   Next=0;  
  itsCount++;  
   
  if(!pHead)  
  {  
  pHead=pNode;  
  return;  
  }  
   
  if(pHead->GetPart()->GetPartNumber()>New)  
  {  
  pNode->SetNext(pHead);  
  pHead=pNode;  
  return;  
  }  
   
  for(;;)  
  {  
  if(!pCurrent->GetNext())  
  {  
  pCurrent->SetNext(pNode);  
  return;  
  }  
  pNext=pCurrent->GetNext();  
  Next=pNext->GetPart()->GetPartNumber();  
  if(Next>New)  
  {  
  pCurrent->SetNext(pNode);  
  pNode->SetNext(pNext);  
  return;  
  }  
  pCurrent=pNext;  
  }  
  }  
   
  int   main()  
  {  
  PartsList   pl;  
  Part   *pPart=0;  
  int   PartNumber;  
  int   value;  
  int   choice;  
  while(1)  
  {  
  cout<<"(0)   Quit   (1)   Car   (2)   Plane   :   ";  
  cin>>choice;  
  if(!choice)  
  break;  
  cout<<"New   Part   Number?   :   ";  
  cin>>PartNumber;  
  if(choice==1)  
  {  
  cout<<"Model   Year?   :   ";  
  cin>>value;  
  pPart=new   CarPart(value,PartNumber);  
  }  
  else  
  {  
  cout<<"Engine   Number?   :   ";  
  cin>>value;  
  pPart=new   AirPlanePart(value,PartNumber);  
  }  
  pl.Insert(pPart);  
  }  
  pl.Iterate();  
  return   0;  
  }Top

9 楼alan118(The Server Side)回复于 2003-02-04 23:07:14 得分 0

至少该说明一下这段代码干什么用啊Top

10 楼bogeyman(魔鬼总是吹着笛子来)回复于 2003-02-05 00:37:29 得分 0

要干什么不说清楚Top

11 楼sea_lover(CodePlus)回复于 2003-02-05 13:36:30 得分 0

你想让我们做什么啊!  
  是帮你改正确了还是说一下错误的原因啊!!!!!  
  说清楚你自己的问题!  
   
   
   
   
   
   
  -----------------------------  
  【◇SeaLover◆〗  
      /                     \  
    ★---CSDN---☆  
   \                     /  
  【○Trust   Me●〗  
  Top

12 楼nothing707(永泽)回复于 2003-02-05 16:11:18 得分 0

楼主不会是想让大家看看希奇吧~~     楼主说说你的要求先~Top

13 楼qfknet(┏●●┓)回复于 2003-02-05 17:06:57 得分 0

说实话!~我要是知道这段程序是干什么的就好了~!  
  就是搞不懂了,才来问的~!Top

14 楼tohigh(岁月的童话.NET)回复于 2003-02-05 17:21:37 得分 10

没有什么用处,链表的例子,我已经改好了,你运行看看。  
   
   
   
  Top

15 楼earthharp(我老子是土匪)回复于 2003-02-05 18:43:06 得分 0

一弱智程序  
  零件管理的,把什么Car,   Plane什么的一些信息放到一个list里面。  
  没什么实际作用,大概是初学C++时随手写的个。Top

16 楼snowman_pc(cpp)回复于 2003-02-05 20:52:04 得分 0

怎么回事,这么长,怎么也得有几条注释吧  
   
  to:   earthharp(骄傲的石头  
  看不起你,五个三角怎么,你历害怎么,不帮助人就不要说风凉话,我就是初学的怎么的,说不定你以后不一定有我强Top

17 楼flashsj()回复于 2003-02-05 20:59:23 得分 0

茫然~~Top

18 楼2608(爱编的程)回复于 2003-02-05 21:27:34 得分 0

你有没有看到过<21天学通高等数学>,<21天学通离散数学>这种类型的书?Top

19 楼wangjiayan(提问~回答)回复于 2003-02-05 21:49:17 得分 0

看傻了!  
  我同意冬天的冰茶的意思Top

20 楼yang0008(单飞)回复于 2003-02-05 23:18:46 得分 0

我给这段程序吓傻了Top

21 楼PPower(月亮光光,照地堂)回复于 2003-02-05 23:34:10 得分 0

看得我的眼都花了,傻了  
  Top

22 楼Journeyman(Lee)回复于 2003-02-06 00:07:15 得分 20

确实是比较简单的程序   大家不防除错一次   就会看明白了  
  很简单的概念   用OO就写这了么长   晕  
  给出除错后的程序:  
  #include<iostream>  
  using   namespace   std;  
   
  //part  
   
  class   Part  
  {  
  public:  
  Part():itsPartNumber(1){}  
  Part(int   PartNumber):itsPartNumber(PartNumber){}  
          virtual   ~Part(){};  
  int   GetPartNumber()const{return   itsPartNumber;}  
  virtual   void   Display()const=0;  
  private:  
  int   itsPartNumber;  
  };  
   
  void   Part::Display()const  
  {  
  cout<<"\nPart   Number:"<<itsPartNumber<<endl;  
  }  
   
  //car   Part  
   
  class   CarPart:   public   Part  
  {  
  public:  
  CarPart():itsModelYear(94){}  
  CarPart(int   year,int   PartNumber);  
  virtual   void   Display()const  
  {  
  Part::Display();  
  cout<<"Model   year"<<itsModelYear<<endl;  
  }  
  private:  
  int   itsModelYear;  
  };  
   
  CarPart::CarPart(int   year,int   PartNumber):  
  itsModelYear(year),  
  Part(PartNumber)  
  {}  
   
  //Air   Plane   Part  
   
  class   AirPlanePart:   public   Part  
  {  
  public:  
  AirPlanePart():itsEngineNumber(1){};  
  AirPlanePart(int   EngineNumber,int   PartNumber);  
  virtual   void   Display()   const  
  {  
  Part::Display();  
  cout<<"Engine   No.   :"<<itsEngineNumber<<endl;  
  }  
  private:  
  int   itsEngineNumber;  
  };  
   
  AirPlanePart::AirPlanePart(int   EngineNumber,int   PartNumber):  
  itsEngineNumber(EngineNumber),  
  Part(PartNumber)  
  {}  
   
  //Part   Node  
   
  class   PartNode  
  {  
  public:  
  PartNode(Part   *);  
  ~PartNode();  
  void   SetNext(PartNode   *node){itsNext=node;}  
  PartNode   *GetNext()const;  
  Part   *GetPart()const;  
  private:  
  Part   *itsPart;  
  PartNode   *itsNext;  
  };  
   
  //Part   Node   Implementations   ...  
   
  PartNode::PartNode(Part   *pPart):  
  itsPart(pPart),  
  itsNext(0)  
  {}  
   
  PartNode::~PartNode()  
  {  
  delete   itsPart;  
  itsPart=0;  
  delete   itsNext;  
  itsNext=0;  
  }  
   
  //Return   NULL   if   no   next   PartNode  
   
  PartNode   *PartNode::GetNext()const  
  {  
  return   itsNext;  
  }  
   
  Part   *PartNode::GetPart()const  
  {  
  if(itsPart)  
  return   itsPart;  
  else  
  return   NULL;  
  }  
   
  //Part   list  
   
  class   PartsList  
  {  
  public:  
  PartsList();  
  ~PartsList();  
  Part   *Find(int   &Position,int   PartNumber)const;  
  int   GetCound()const{return   itsCount;}  
  Part   *GetFirst()const;  
  void   Insert(Part   *);  
  void   Iterate()const;  
  Part   *operator[](int)const;  
  private:  
  PartNode   *pHead;  
  int   itsCount;  
  };  
   
  //Implementations   for   lists...  
   
   
  PartsList::PartsList():  
  pHead(0),  
  itsCount()  
  {}  
   
   
  PartsList::~PartsList()  
  {  
  delete   pHead;  
  }  
   
  Part   *PartsList::GetFirst()const  
  {  
  if(pHead)  
  return   pHead->GetPart();  
  else  
  return   NULL;  
  }  
   
  Part   *PartsList::operator[](int   offset)const  
  {  
  PartNode   *pNode=pHead;  
  if(!pHead)  
  return   NULL;  
  if(offset>itsCount)  
  return   NULL;  
  for(int   i=0;   i<offset;   i++)  
  pNode=pNode->GetNext();  
  return   pNode->GetPart();  
  }  
   
  Part   *PartsList::Find(int   &Position,int   PartNumber)const  
  {  
  PartNode   *pNode=0;  
  for(pNode=pHead,Position=0;pNode!=NULL;pNode=pNode->GetNext(),Position++)  
  {  
  if(pNode->GetPart()->GetPartNumber()==PartNumber)  
  break;  
  }  
  if(pNode==NULL)  
  return   NULL;  
  else  
  return   pNode->GetPart();  
  }  
   
  void   PartsList::Iterate()const  
  {  
  if(!pHead)  
  return;  
  PartNode   *pNode=pHead;  
  do  
  pNode->GetPart()->Display();  
  while(pNode=pNode->GetNext());  
  }  
   
  void   PartsList::Insert(Part   *pPart)  
  {  
  PartNode   *pNode=new   PartNode(pPart);  
  PartNode   *pCurrent=pHead;  
  PartNode   *pNext=0;  
  int   New=pPart->GetPartNumber();  
  int   Next=0;  
  itsCount++;  
   
  if(!pHead)  
  {  
  pHead=pNode;  
  return;  
  }  
   
  if(pHead->GetPart()->GetPartNumber()>New)  
  {  
  pNode->SetNext(pHead);  
  pHead=pNode;  
  return;  
  }  
   
  for(;;)  
  {  
  if(!pCurrent->GetNext())  
  {  
  pCurrent->SetNext(pNode);  
  return;  
  }  
  pNext=pCurrent->GetNext();  
  Next=pNext->GetPart()->GetPartNumber();  
  if(Next>New)  
  {  
  pCurrent->SetNext(pNode);  
  pNode->SetNext(pNext);  
  return;  
  }  
  pCurrent=pNext;  
  }  
  }  
   
  int   main()  
  {  
  PartsList   pl;  
  Part   *pPart=0;  
  int   PartNumber;  
  int   value;  
  int   choice;  
  while(1)  
  {  
  cout<<"(0)   Quit   (1)   Car   (2)   Plane   :   ";  
  cin>>choice;  
  if(!choice)  
  break;  
  cout<<"New   Part   Number?   :   ";  
  cin>>PartNumber;  
  if(choice==1)  
  {  
  cout<<"Model   Year?   :   ";  
  cin>>value;  
  pPart=new   CarPart(value,PartNumber);  
  }  
  else  
  {  
  cout<<"Engine   Number?   :   ";  
  cin>>value;  
  pPart=new   AirPlanePart(value,PartNumber);  
  }  
  pl.Insert(pPart);  
  }  
  pl.Iterate();  
  return   0;  
  }Top

23 楼k7sem(【Conch fish】I love qing qing.)回复于 2003-02-06 00:27:46 得分 0

oh   yes   oh   no   oh   my   god!Top

24 楼Landlord(一生努力,便成大师!)回复于 2003-02-06 20:25:31 得分 0

贴出的程序太长了,上网要钱的,到以后应该只留其梗概就行Top

25 楼smallfrogs(MVP)回复于 2003-02-06 20:33:04 得分 0

太长了  
   
  懒得看了   :DTop

26 楼allen1981813(Nahe des Geliebten)回复于 2003-02-06 20:42:25 得分 0

goodTop

27 楼dzhcheng(逸枫)回复于 2003-02-06 21:36:33 得分 0

upTop

28 楼allen1981813(Nahe des Geliebten)回复于 2003-02-06 22:13:23 得分 20

To:earthharp(骄傲的石头)    
  不该说不说.  
  我个人认为,只要是原代码,没有简单和不简单的,  
  只要是代码,都值得研究,哪怕是main(){}#include"only   one"  
  也许您不这样想.  
  To:楼主:  
  这东西好象有很多输入失误,很多是重复的,我并不知道您的本意,所以只改了语法错误.逻辑上的,看您自己了.  
  #include<iostream>  
  using   namespace   std;  
  //part  
  class   Part_T{  
  int   i_itsPartNumber;  
  public:  
  Part_T():i_itsPartNumber(1){}  
  Part_T(int   aPartNumber):i_itsPartNumber(aPartNumber){}  
          virtual   ~Part_T(){};  
  int   getPartNumber()const{return   i_itsPartNumber;}  
  virtual   void   display()const=0;  
  };  
  void   Part_T::display()const{  
  cout<<"\nPart   Number:"<<i_itsPartNumber<<endl;  
  }  
   
  //car   Part  
  class   CarPart_T:   public   Part_T{  
  int   i_itsModelYear;  
  public:  
  CarPart_T():i_itsModelYear(94){}  
  CarPart_T(int,int);  
  virtual   void   display()const{  
  Part_T::display();  
  cout<<"Model   year"<<i_itsModelYear<<endl;  
  }  
  };  
   
  CarPart_T::CarPart_T(int   aYear,int   aPartNumber)  
  :Part_T(aPartNumber),  
  i_itsModelYear(aYear)  
  {}  
  //Air   Plane   Part  
   
  class   AirPlanePart_T:   public   Part_T{  
  int   i_itsEngineNumber;  
  public:  
  AirPlanePart_T():i_itsEngineNumber(1){};  
  AirPlanePart_T(int,int);  
  virtual   void   display()   const{  
  Part_T::display();  
  cout<<"Engine   No.   :"<<i_itsEngineNumber<<endl;  
  }  
  };  
   
  AirPlanePart_T::AirPlanePart_T(int   aEngineNumber,int   aPartNumber)  
  :Part_T(aPartNumber),  
  i_itsEngineNumber(aEngineNumber)  
  {}  
   
  //Part   Node  
  class   PartNode_T{  
  Part_T*   i_itsPartPtr;  
  PartNode_T*   i_itsNextPtr;  
  public:  
  PartNode_T(Part_T   *);  
  ~PartNode_T();  
  void   setNext(PartNode_T   *node){i_itsNextPtr=node;}  
  PartNode_T   *getNext()const;  
  Part_T   *getPart()const;  
  };  
   
  //Part   Node   Implementations   ...  
  PartNode_T::PartNode_T(Part_T   *aPartPtr):  
  i_itsPartPtr(aPartPtr),  
  i_itsNextPtr(0)  
  {}  
   
  PartNode_T::~PartNode_T(){  
  delete   i_itsPartPtr;i_itsPartPtr=0;//good   style  
  delete   i_itsNextPtr;i_itsNextPtr=0;  
  }  
   
  //Return   NULL   if   no   next   PartNode  
  PartNode_T*   PartNode_T::getNext()const{  
  return   i_itsNextPtr;  
  }  
   
  Part_T*   PartNode_T::getPart()const{  
  if(i_itsPartPtr)   return   i_itsPartPtr;  
  else   return   0;  
  }  
   
  //Part   Node  
  class   PartsList_T{  
  PartNode_T*   i_headPtr;  
  int   i_itsCount;  
  public:  
  PartsList_T();  
  ~PartsList_T();  
  Part_T*   find(int&,int)const;  
  int   getCount()const{return   i_itsCount;}  
  Part_T   *getFirst()const;  
  void   insert(Part_T*);  
  void   iterate()const;  
  Part_T*   operator[](int)const;  
  };  
   
  PartsList_T::PartsList_T()  
  :i_headPtr(0),  
  i_itsCount(0)  
  {}  
   
  PartsList_T::~PartsList_T(){  
  delete   i_headPtr;  
  }  
   
  Part_T*   PartsList_T::getFirst()const{  
  if(i_headPtr)   return   i_headPtr->getPart();  
  else   return   0;  
  }  
   
  Part_T*   PartsList_T::operator   [](int   offset)const{  
  PartNode_T*   nodePtr=i_headPtr;  
  if(!i_headPtr)   return   0;  
  if(offset   >i_itsCount)   return   0;  
  for(int   i=0;   i<offset;   i++)  
  nodePtr=nodePtr->getNext();  
  return   nodePtr->getPart();  
  }  
   
  Part_T*   PartsList_T::find(int   &aPosition,int   aPartNumber)const{  
  PartNode_T*   nodePtr=0;  
  for(nodePtr=i_headPtr,aPosition=0;   nodePtr!=0;   nodePtr=nodePtr->getNext(),aPosition++)  
  if((nodePtr->getPart())->getPartNumber()==aPartNumber)    
  break;  
  if(!nodePtr)   return   0;  
  else   return   nodePtr->getPart();  
  }  
   
  void   PartsList_T::iterate()const{  
  if(!i_headPtr)   return;  
  PartNode_T*   nodePtr=i_headPtr;  
  do{  
  (nodePtr->getPart())->display();  
  }while(nodePtr=nodePtr->getNext());  
  }  
   
  void   PartsList_T::insert(Part_T*   aPartPtr){  
  PartNode_T   *nodePtr=new   PartNode_T(aPartPtr);  
  PartNode_T   *currentPtr=i_headPtr;  
  PartNode_T   *nextPtr=0;  
  int   New=aPartPtr->getPartNumber();  
  int   Next=0;  
  i_itsCount++;  
   
  if(!i_headPtr){  
  i_headPtr=nodePtr;  
  return;  
  }  
  if(((i_headPtr->getPart())->getPartNumber())   >   New){  
  nodePtr->setNext(i_headPtr);  
  i_headPtr=nodePtr;  
  return;  
  }  
  while(true){  
  if(!currentPtr->getNext()){  
  currentPtr->setNext(nodePtr);  
  return;  
  }  
  nextPtr=currentPtr->getNext();  
  Next=(nextPtr->getPart())->getPartNumber();  
  if(Next>New){  
  currentPtr->setNext(nodePtr);  
  nodePtr->setNext(nextPtr);  
  return;  
  }  
  currentPtr=nextPtr;  
  }  
  }  
  void   main(){  
  PartsList_T   pl;  
  Part_T*   pPart=0;  
  int   partNumber;  
  int   value;  
  int   choice;  
  while(true){  
  cout<<"(0)   Quit   (1)   Car   (2)   Plane   :   ";  
  cin>>choice;  
  if(!choice)   break;  
  cout<<"New   Part   Number?   :   ";  
  cin>>partNumber;  
  if(choice==1){  
  cout<<"Model   Year?   :   ";  
  cin>>value;  
  pPart=new   CarPart_T(value,partNumber);  
  }  
  else{  
  cout<<"Engine   Number?   :   ";  
  cin>>value;  
  pPart=new   AirPlanePart_T(value,partNumber);  
  }  
  pl.insert(pPart);  
  }  
  pl.iterate();  
  }  
  Top

29 楼liotion(天上掉下一个林分分~~)回复于 2003-02-06 22:21:07 得分 0

我看别人的程序一定要有注释,不然我会晕!~~~Top

30 楼earthharp(我老子是土匪)回复于 2003-02-07 11:23:53 得分 0

搞我批斗会呀。  
  我是说这程序本身没什么实际意义而已。象这种问题,书的问题和程序的问题都是很正常的。也没说一定要把它看懂。我看书的时候也很少关注这种细枝末节的东西。其实这东西理解的大概就行了,懂不懂也不代表你的水平怎么样。  
  如果在变量名和结构控制上不注意,就算很短的程序也是不知所云。Top

31 楼qfknet(┏●●┓)回复于 2003-02-07 12:21:07 得分 0

其实程序没有什么实际的意义~!  
  只是我闲的没事拿来练练~!  
   
  学程序不就是要练会你看到的每一个程学吗?Top

32 楼chenxihui2003(晨曦)回复于 2003-02-11 02:11:32 得分 0

TO   earthharp(骄傲的石头)   (   )    
   
  我没批斗你,我最喜欢看五个星的了。Top

33 楼xkak2(矗立云端)回复于 2003-02-12 10:46:11 得分 0

这是什么意思?楼主能不能提出你的问题,一上来就是这么长的源程序,又没有任何注释,没有任何要求,大家的时间都是很宝贵的,连你要问什么都不知道,还要先猜测你要问的问题,这也太过分了吧?Top

相关问题

  • 极度郁闷百分之百,散分……
  • 一个百分之百初学者的问题~
  • 华军是不是有问题,一上CPU使用率就百分之百。
  • 菜鸟关于hotkey的一点小问题(结帖率百分之百!)
  • 急救:sqlservr占用CPU百分之百,ADSL断线,不能重新连接。
  • 四月一个晴朗的早晨,遇见一个百分之百的女孩 (译者:林少华)
  • 百分之百送分:一台PC 对多个IP端的监控,请求大家给个可行的方案~
  • 紧急求助TOMCAT占用CPU百分之百怎么解决问题100分大放送
  • 梅花雨控件简单一问
  • 一个简单而又不起眼的问题

关键词

  • c++
  • 内容
  • partnode
  • pnode
  • ppart
  • partslist
  • getpartnumber
  • getpart
  • partnumber
  • phead

得分解答快速导航

  • 帖主:qfknet
  • SENDFREE
  • tohigh
  • tohigh
  • Journeyman
  • allen1981813

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo