|
Программирование >> Дополнительные возможности наследования
самостоятельно Неделя Z Подведение итогов в этой главе вашему вниманию предлагается достаточно мошная программа, в которой используется большинство средств и подходов профаммирования, освоенных вами в течение двух недель. В этой программе используются связанные списки, виртуальные функции, чистые виртуальные функции, замешения функций, полиморфизм, открытое наследование, перефузка функций, вечные циклы, указатели, ссылки и многие другие знакомые вам средства. Обратите внимание, что представленный здесь связанный список отличается от рассмотренных ранее. Язык С++ предоставляет множество способов достижения одной и той же цели. Цель данной профаммы состоит в создании функционального связанного списка. В узлах созданного списка можно хранить записи о деталях и афегатах, что позволяет использовать его в реальных прикладных программах баз данных складов. Хотя здесь представлена не окончательная форма программы, она достаточно хорошо демонстрирует возможности создания совершенной структуры накопления и обработки данных. Листинг профаммы содержит 311 строк. Попробуйте самостоятельно проанализировать код, прежде чем прочтете анализ, приведенный после листинга. Итоги вшороА неуени 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Название: Неделя 2. Подведение итогов Файл: Week2 Описание: Демонстрация создания и использования связанного списка Классы: PART - содержит идентификационный номер детали и обеспечивает возможность добавлять другие данные PartNode - функционирует как узел в PartsList PartsList - реализует механизм связывания узлов в список 19: #inolude <iostream.h> 23: ................ Part ............ 25: Абстрактный базовый класс, общий для всех деталей 26: class Part 27: { 28: public: 29: Part():itsPartNumber(1) { } 30: Part(int PartNumber):itsPartNumber(PartNumber){ } 31: virtual PartOi } ; 32: int GetPartNumber() const { return itsPartNumber; } 33: virtual void DisplayO const =0; должна быть замещена как private 34: private: 35: int ItsPartNumber; 36: } ; 38: выполнение чистой виртуальной функции в 39: стандартном виде для всех производных классов 40: void Part::Display() const 41: { 42: cout Л пНомер детали: ItsPartNumber endl; 43: } 45: * ...* **.... Автомобильные детали .**** .. . 46: 47: class CarPart : public Part 48: { 49: public: 50: CarPart():itsModelYear(94){ } 51: CarPartdnt year, int partNumber); 52: virtual void DisplayO const 53: { 54: Part;;Display(); cout Год создания: ; 55: cout itsModelYear endl; 56: } 57: private: 58: int ItsModelYear; 59: } ; 61: CarPart::CarPart(int year, int partNumber): 62: itsModelYear(year), 63: Part(partNumber) 64: { > 67: ...♦.*....... Авиационные детали .......... 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 class AirPlanePart ; public Part { public: AirPlanePartO :itsEngineNumber(1){ } ; AirPlanePart(int EngineNumber, int PartNumber); virtual void DisplayO const Part;;Display(); cout << Номер двигателя: ; cout << ItsEngineNumber << endl; private; int ItsEngineNumber; AirPlanePart;;AirPlanePart(int EngineNumber, int PartNumber): ItsEngineNumber(EngineNumber), Part(PartNumber) .* .. .. . * Узлы списка деталей *♦* * class PartNode public; PartNode (Part*); PartNodeO; void SetNext(PartNode * node) { itsNext = node; } PartNode * GetNextO const; Part * GetPartO const; private; Part itsPart; PartNode * itsNext; } ; Выполнение PartNode... PartNode;;PartNode(Part* pPart); itsPart(pPart), itsNext(O) { } PartNode;:PartNode() { delete itsPart; itsPart = 0; delete itsNext; itsNext = 0; Возвращается NULL, если нет следующего узла PartNode
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |