⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch14rv2.htm

📁 Why C++ is the emerging standard in software development. The steps to develop a C++ program. How
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"><HTML><HEAD><!-- This document was created from RTF source by rtftohtml version 3.0.1 -->	<META NAME="GENERATOR" Content="Symantec Visual Page 1.0">	<META HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=iso-8859-1">	<TITLE>Teach Yourself C++ in 21 Days</TITLE></HEAD><BODY TEXT="#000000" BGCOLOR="#FFFFFF"><H1></H1><P ALIGN="CENTER"><A HREF="ch14.htm"><IMG SRC="../buttons/BLANPREV.GIF"WIDTH="37" HEIGHT="37" ALIGN="BOTTOM" BORDER="0"></A><A HREF="http://www.mcp.com/sams"><IMGSRC="../buttons/BLANHOME.GIF" WIDTH="37" HEIGHT="37" ALIGN="BOTTOM"BORDER="0"></A><A HREF="../index.htm"><IMG SRC="../buttons/BLANTOC.GIF"WIDTH="37" HEIGHT="37" ALIGN="BOTTOM" BORDER="0"></A><A HREF="ch15.htm"><IMG SRC="../buttons/BLANNEXT.GIF"WIDTH="37" HEIGHT="37" ALIGN="BOTTOM" BORDER="0"></A><H2 ALIGN="CENTER"><BR><A NAME="Heading1"></A><FONT COLOR="#000077">In Review</FONT></H2><P>The Week in Review program for Week 2 brings together many of the skills you'veacquired over the past fortnight and produces a powerful program.</P><P>This demonstration of linked lists utilizes virtual functions, pure virtual functions,function overriding, polymorphism, public inheritance, function overloading, foreverloops, pointers, references, and more.</P><P>The goal of this program is to create a linked list. The nodes on the list aredesigned to hold parts, as might be used in a factory. While this is not the finalform of this program, it does make a good demonstration of a fairly advanced datastructure. The code list is 311 lines. Try to analyze the code on your own beforereading the analysis that follows the output.</P><P><A NAME="Heading2"></A><FONT SIZE="4" COLOR="#000077"><B>Listing R2.1. Week 2in Review listing.</B></FONT><PRE><FONT COLOR="#0066FF">0:     // **************************************************1:     //2:     // Title:       Week 2 in Review3:     //4:     // File:       Week25:     //6:     // Description:   Provide a linked list demonstration program7:     //8:     // Classes:      PART - holds part numbers and potentially other9:     //                     information about parts10:     //11:     //               PartNode - acts as a node in a PartsList12:     //13:     //               PartsList - provides the mechanisms for a linked list                                                            &#194;of parts14:     //15:     // Author:      Jesse Liberty (jl)16:     //17:     // Developed:   486/66 32mb RAM  MVC 1.518:     //19:     // Target:      Platform independent20:     //21:     // Rev History:  9/94 - First release (jl)22:     //23:     // **************************************************24:   25:     #include &lt;iostream.h&gt;26:   27:     typedef unsigned long ULONG;28:     typedef unsigned short USHORT;29:   30:   31:     // **************** Part ************32:   33:     // Abstract base class of parts34:     class Part35:     {36:     public:37:        Part():itsPartNumber(1) {}38:        Part(ULONG PartNumber):itsPartNumber(PartNumber){}39:        virtual ~Part(){};40:        ULONG GetPartNumber() const { return itsPartNumber; }41:        virtual void Display() const =0;  // must be overridden42:     private:43:        ULONG itsPartNumber;44:     };45:   46:     // implementation of pure virtual function so that47:     // derived classes can chain up48:     void Part::Display() const49:     {50:         cout &lt;&lt; &quot;\nPart Number: &quot; &lt;&lt; itsPartNumber &lt;&lt; endl;51:     }52:   53:     // **************** Car Part ************54:   55:     class CarPart : public Part56:     {57:     public:58:        CarPart():itsModelYear(94){}59:        CarPart(USHORT year, ULONG partNumber);60:        virtual void Display() const 61:       { 62:          Part::Display(); cout &lt;&lt; &quot;Model Year: &quot;;63:          cout &lt;&lt; itsModelYear &lt;&lt; endl;  64:       }65:     private:66:        USHORT itsModelYear;67:     };68:   69:     CarPart::CarPart(USHORT year, ULONG partNumber):70:        itsModelYear(year),71:        Part(partNumber)72:     {}73:   74:   75:     // **************** AirPlane Part ************76:   77:     class AirPlanePart : public Part78:     {79:     public:80:        AirPlanePart():itsEngineNumber(1){};81:        AirPlanePart(USHORT EngineNumber, ULONG PartNumber);82:        virtual void Display() const83:       { 84:          Part::Display(); cout &lt;&lt; &quot;Engine No.: &quot;;85:          cout &lt;&lt; itsEngineNumber &lt;&lt; endl;  86:       }87:     private:88:        USHORT itsEngineNumber;89:     };90:   91:     AirPlanePart::AirPlanePart(USHORT EngineNumber, ULONG PartNumber):92:        itsEngineNumber(EngineNumber),93:        Part(PartNumber)94:     {}95:   96:     // **************** Part Node ************97:     class PartNode98:     {99:     public:100:        PartNode (Part*);101:        ~PartNode();102:        void SetNext(PartNode * node) { itsNext = node; }103:        PartNode * GetNext() const;104:        Part * GetPart() const;105:     private:106:        Part *itsPart;107:        PartNode * itsNext;108:     };109:   110:     // PartNode Implementations...111:   112:     PartNode::PartNode(Part* pPart):113:     itsPart(pPart),114:     itsNext(0)115:     {}116:   117:     PartNode::~PartNode()118:     {119:        delete itsPart;120:        itsPart = 0;121:        delete itsNext;122:        itsNext = 0;123:     }124:   125:     // Returns NULL if no next PartNode126:     PartNode * PartNode::GetNext() const127:     {128:           return itsNext;129:     }130:   131:     Part * PartNode::GetPart() const132:     {133:        if (itsPart)134:           return itsPart;135:        else136:           return NULL; //error137:     }138:   139:     // **************** Part List ************140:     class PartsList141:     {142:     public:143:        PartsList();144:        ~PartsList();145:        // needs copy constructor and operator equals!146:        Part*      Find(ULONG &amp; position, ULONG PartNumber)  const;147:        ULONG      GetCount() const { return itsCount; }148:        Part*      GetFirst() const;149:        static     PartsList&amp; GetGlobalPartsList() 150:      { 151:         return  GlobalPartsList; 152:      }153:        void       Insert(Part *);154:        void       Iterate(void (Part::*f)()const) const;155:        Part*      operator[](ULONG) const;156:     private:157:        PartNode * pHead;158:        ULONG itsCount;159:        static PartsList GlobalPartsList;160:     };161:   162:     PartsList PartsList::GlobalPartsList;163:   164:     // Implementations for Lists...165:   166:     PartsList::PartsList():167:        pHead(0),168:        itsCount(0)169:        {}170:   171:     PartsList::~PartsList()172:     {173:        delete pHead;174:     }175:   176:     Part*   PartsList::GetFirst() const177:     {178:        if (pHead)179:           return pHead-&gt;GetPart();180:        else181:           return NULL;  // error catch here182:     }183:   184:     Part *  PartsList::operator[](ULONG offSet) const185:     {186:        PartNode* pNode = pHead;187:   188:        if (!pHead)189:           return NULL; // error catch here190:   191:        if (offSet &gt; itsCount)192:           return NULL; // error193:   194:        for (ULONG i=0;i&lt;offSet; i++)195:           pNode = pNode-&gt;GetNext();196:   197:       return   pNode-&gt;GetPart();198:     }199:   200:     Part*   PartsList::Find(ULONG &amp; position, ULONG PartNumber)  const201:     {202:        PartNode * pNode = 0;203:        for (pNode = pHead, position = 0;204:              pNode!=NULL;205:              pNode = pNode-&gt;GetNext(), position++)206:        {207:           if (pNode-&gt;GetPart()-&gt;GetPartNumber() == PartNumber)208:              break;209:        }210:        if (pNode == NULL)211:           return NULL;212:        else213:           return pNode-&gt;GetPart();214:     }215:   216:     void PartsList::Iterate(void (Part::*func)()const) const217:     {218:        if (!pHead)219:           return;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -