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

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

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:

Перейти на страницу:

Похожие книги

Сущность технологии СОМ. Библиотека программиста
Сущность технологии СОМ. Библиотека программиста

В этой книге СОМ исследуется с точки зрения разработчика C++. Написанная ведущим специалистом по модели компонентных объектов СОМ, она раскрывает сущность СОМ, помогая разработчикам правильно понять не только методы модели программирования СОМ, но и ее основу. Понимание мотивов создания СОМ и ее аспектов, касающихся распределенных систем, чрезвычайно важно для тех разработчиков, которые желают пойти дальше простейших приложений СОМ и стать по-настоящему эффективными СОМ-программистами. Показывая, почему СОМ для распределенных систем (Distributed СОМ) работает именно так, а не иначе, Дон Бокс дает вам возможность применять эту модель творчески и эффективно для ежедневных задач программирования.

Дональд Бокс

Программирование, программы, базы данных / Программирование / Книги по IT