百分之百是一个特别简单的问题~!看得我的眼都花了~!帮忙呀~!
今天闲的没事,把一本叫做《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




