Джесс Либерти - Освой самостоятельно С++ за 21 день.

Тут можно читать онлайн Джесс Либерти - Освой самостоятельно С++ за 21 день. - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Освой самостоятельно С++ за 21 день.
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    4.11/5. Голосов: 91
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Джесс Либерти - Освой самостоятельно С++ за 21 день. краткое содержание

Освой самостоятельно С++ за 21 день. - описание и краткое содержание, автор Джесс Либерти, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

В книге широко представлены возможности новейшей версии программного продукта Microsoft Visual C++. Подробно описаны средства и подходы программирования современных профессиональных приложений. Материалы книги дополнены многочисленными демонстрационными программами, в процессе разработки которых максимально используются возможности программных инструментов Microsoft Visual Studio. Особое внимание уделено новинкам версии 6.0 и новейшим технологиям объектно-ориентированного программирования, включая использование библиотеки MFC и шаблонов классов, а также создание связанных списков. Отдельное занятие посвящено вопросам объектно-ориентированного анализа и проектирования приложений. Подробно рассмотрены все средства и подходы конструирования собственных пользовательских классов.

Книга рассчитана на широкий круг читателей, интересующихся современными проблемами программирования.

Освой самостоятельно С++ за 21 день. - читать онлайн бесплатно полную версию (весь текст целиком)

Освой самостоятельно С++ за 21 день. - читать книгу онлайн бесплатно, автор Джесс Либерти
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Подведение итогов

В этой главе вашему вниманию предлагается достаточно мощная программа, в которой используется большинство средств и подходов программирования, освоенных вами в течение двух недель.

В этой программе используются связанные списки, виртуальные функции, чистые виртуальные функции, замещения функций, полиморфизм, открытое наследование, перегрузка функций, вечные циклы, указатели, ссылки и многие другие знакомые вам средства. Обратите внимание, что представленный здесь связанный список отличается от рассмотренных ранее. Язык C++ предоставляет множество способов достижения одной и той же цели.

Цель данной программы состоит в создании функционального связанного списка. В узлах созданного списка можно хранить записи о деталях и агрегатах, что позволяет использовать его в реальных прикладных программах баз данных складов. Хотя здесь представлена не окончательная форма программы, она достаточно хорошо демонстрирует возможности создания совершенной структуры накопления и обработки данных. Листинг программы содержит 311 строк. Попробуйте самостоятельно проанализировать код, прежде чем прочтете анализ, приведенный после листинга.

Итоги второй недели

1: // **********************************

2: //

3: // Название: Подведение итогов

4: //

5: // Файл: Week2

6: //

7: // Описание: Демонстрация создания и использования связанного списка

8: //

9: // Классы: PART - содержит идентификационный

10: // номер детали и обеспечивает возможность

11: // добавлять другие данные

12: // PartNode - функционирует как узел в PartsList

13: //

14: // PartsList - реализует механизм связывания

15: // узлов в список

16: //

17: // **********************************

18:

19: #include

20:

21:

22:

23: // **************** Part ************

24:

25: // Абстрактный базовый класс, общий для всех деталей

26: class Part

27: {

28: public:

29: Part():itsPartNumber(1) { }

30: Part(int PartNumber):itsPartNumber(PartNumber) { }

31: virtual ~Part() { };

32: int GetPartNumber() const { return itsPartNumber; }

33: virtual void Display() const =0; // должна быть замещена как private

34: private:

35: int itsPartNumber;

36: };

37:

38: // выполнение чистой виртуальной функции в

39: // стандартном виде для всех производных классов

40: void Part::Display() const

41: {

42: cout << "\nНомер детали: " << itsPartNumber << endl;

43: }

44:

45: // ************* Автомобильные детали **********

46:

47: class CarPart : public Part

48: {

49: public:

50: CarPart():itsModelYear(94){ }

51: CarPart(int year, int partNumber);

52: virtual void Display() const

53: {

54: Part::Display(); cout << "Год создания: ";

55: cout << itsModelYear << endl;

56: }

57: private:

58: int itsModelYear;

59: };

60:

61: CarPart::CarPart(int year, int partNumber):

62: itsModelYear(year),

63: Part(partNumber)

64: { }

65:

66:

67: // ************* Авиационные детали **********

68:

69: class AirPlanePart : public Part

70: {

71: public:

72: AirPlanePart():itsEngineNumber(1){ } ;

73: AirPlanePart(int EngineNumber, int PartNumber);

74: virtual void Display() const

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

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();

256: if (Next > New)

257: {

258: pCurrent->SetNext(pNode);

259: pNode->SetNext(pNext);

260: return;

261: }

262: pCurrent = pNext;

263: }

264: }

265:

266: int main()

267: {

268: PartsList&pl = PartsList::GetGlobalPartsList();

269: Part * pPart = 0;

270: int PartNumber;

271: int value;

272: int Choice;

273:

274: while (1)

275: {

276: cout << "(0)Quit (1)Car (2)Plane: ";

277: cin >> choice;

278:

279: if (!choice)

280: break;

281:

282: cout << "New PartNumber?: ";

283: cin >> PartNumber;

284:

285: if (choice == 1)

286: {

287: cout << "Model Year?: ";

288: cin >> value;

289: pPart = new CarPart(value,PartNumber);

290: }

291: else

292: {

293: cout << "Engine Number?: ";

294: cin >> value;

295: pPart = new AirPlanePart(value,PartNumber);

296: }

297:

298: pl.Insert(pPart);

299: }

300: void (Part::*pFunc)()const = Part::Display;

301: pl.Iterate(pFunc);

302: return 0;

303: }

Результат:

(0)Quit (1)Car (2)Plane: 1

New PartNumber?: 2837

Model Year? 90

(0)Quit (1)Car (2)Plane: 2

New PartNumber?: 378

Engine Number?: 4938

(0)Quit (1)Car (2)Plane: 1

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Джесс Либерти читать все книги автора по порядку

Джесс Либерти - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




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


Отзывы читателей о книге Освой самостоятельно С++ за 21 день., автор: Джесс Либерти. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x