Чтение онлайн

ЖАНРЫ

Освой самостоятельно С++ за 21 день.

Либерти Джесс

Шрифт:

75: {

76: Part::Display; cout << "Номер двигателя: ";

77: cout << itsEngineNumber << endl;

78: }

79: private:

80: int itsEngineNumber;

81: };

82:

83: AirPlanePart::AirPlanePart(int EngineNumber, intPartNumber):

84: itsEngineNumber(EngineNumber),

85: Part(PartNumber)

86: { }

87:

88: // ************** Узлы списка деталей **********

89: class PartNode

90: {

91: public:

92: PartNode (Part*);

93: ~PartNode;

94: void SetNext(PartNode * node) { itsNext = node; }

95: PartNode * GetNext const;

96: Part * GetPart const;

97: private:

98: Part *itsPart;

99: PartNode * itsNext;

100: };

101:

102: //

Выполнение PartNode...

103:

104: PartNode::PartNode(Part* pPart):

105: itsPart(pPart),

106: itsNext(0)

107: { }

108:

109: PartNode::~PartNode

110: {

111: delete itsPart;

112: itsPart = 0;

113: delete itsNext;

114: itsNext = 0;

115: }

116:

117: //Возвращается NULL, если нет следующего узла PartNode

118: PartNode * PartNode::GetNext const

119: {

120: return itsNaxt;

121: }

122:

123: Part * PartNode::GetPart const

124: {

125: if (itsPart)

126: return itsPart;

127: else

128: return NULL; // ошибка

129: }

130:

131: // **************** Список деталей ************

132: class PartsList

133: {

134: public:

135: PartsList;

136: ~PartsList;

137: // Необходимо, чтобы конструктор-копировщик и оператор соответствовали друг другу!

138: Part* Find(int & position, int PartNumber) const;

139: int GetCount const { return itsCount; }

140: Part* GetFirst const;

141: static PartsList& GetGlobalPartsList

142: {

143: return GlobalPartsList;

144: }

145: void Insert(Part *);

146: void Iterate(void (Part::*f)const) const;

147: Part* operator[](int) const;

148: private:

149: PartNode * pHead;

150: int itsCount;

151: static PartsList GlobalPartsList;

152: };

153:

154: PartsList PartsList::GlobalPartsList;

155:

156: // Выполнение списка...

157:

158: PartsList::PartsList:

159: pHead(0),

160: itsCount(0)

161: { }

162:

163: PartsList::^PartsList

164: {

165: delete pHead;

166: }

167:

168: Part* PartsList::GetFirst const

169: {

170: if (pHead)

171: return pHead->GetPart;

172: else

173: return NULL; //

ловушка ошибок

174: }

175:

176: Part * PartsList::operator[](int offSet) const

177: {

178: PartNode* pNode = pHead;

179:

180: if (!pHead)

181: return NULL; // ловушка ошибок

182:

183: if (offSet > itsCount)

184: return NULL; // ошибка

185:

186: for (int i=0;i<offSet; i++)

187: pNode = pNode->GetNext;

188:

189: return pNode->GetPart;

190: }

191:

192: Part* PartsList::Find(int & position, int PartNumber) const

193: {

194: PartNode * pNode = 0;

195: for (pNode = pHead, position = 0;

196: pNode!=NULL;

197: pNode = pNode->GetNext, position++)

198: {

199: if (pNode->GetPart->GetPartNumber == PartNumber)

200: break;

201: }

202: if (pNode == NULL)

203: return NULL;

204: else

205: return pNode->GetPart;

206: }

207:

208: void PartsList::Iterate(void (Part::*func)const) const

209: {

210: if (!pHead)

211: return;

212: PartNode* pNode = pHead;

213: do

214: (pNode->GetPart->*func);

215: while (pNode = pNode->GetNext);

216: }

217:

218: void PartsList::Insert(Part* pPart)

219: {

220: PartNode * pNode = new PartNode(pPart);

221: PartNode * pCurrent = pHead;

222: PartNode >> pNext = 0;

223:

224: int New = pPart->GetPartNumber;

225: int Next = 0;

226: itsCount++;

227:

228: if (!pHead)

229: {

230: pHead = pNode;

231: return;

232: }

233:

234: // Если это значение меньше головного узла,

235: // то текущий узел становится головным

236: if (pHead->GetPart->GetPartNumber->New)

237: {

238: pNode->SetNext(pHead);

239: pHead = pHode;

240: return;

241: }

242:

243: for (;;)

244: {

245: // Если нет следующего, вставляется текущий

246: if (!pCurrent->GetNext)

247: {

248: pCurrent->SetNext(pNode);

249: return;

250: }

251:

252: // Если текущий больше предыдущего, но меньше следующего, то вставляем

253: // здесь. Иначе присваиваем значение указателя Next

254: pNext = pCurrent->GetNext;

255: Next = pNext->GetPart->GetPartNumber;

Поделиться с друзьями: