Программирование >>  Дополнительные возможности наследования 

1 ... 138 139 140 [ 141 ] 142 143 144 ... 265



самостоятельно Неделя 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



1 ... 138 139 140 [ 141 ] 142 143 144 ... 265

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика