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

1 ... 229 230 231 [ 232 ] 233 234 235 ... 265


24:

25: Разработан: Pentium 200 Pro. 128MB RAM MVC 5.0

26:

27: Требования: He зависит от платформы

28:

29: История создания: 9/94 - Первый выпуск (jl)

30; 4/97 - Обновлено (jl)

31: **************************************************

33: #include <iostream.h> 34:

35: классы исключений

36; class Exception { } ;

37; class OutOfMemory : public Exception! } ;

38; class NullNode ; public Exception! } ;

39; class EmptyList ; public Exception { } ;

40: class BoundsError : public Exception { } ; 41; 42:

43: **************** Part ************

44: Абстрактный базовый класс запчастей

45: class Part

46; {

47: public;

48; Part();its0bjectNumber(1) { }

49: Part(int ObjectNumber):itsOb]ectNumber(ObjectNumber){ } 50: virtual Part(){ } ;

51; int GetObjectNumberO const { return itsObjectNumber; }

52; virtual void DisplayO const =0; функция будет замещена в производном классе 53:

54: private;

55: int ItsObjectNumber;

56: } ;

58; выполнение чистой виртуальной функции, необходимой

59; для связывания объектов производного класса

60: void Part;;DisplayO const

61; {

62: cout XnPart Number; ItsObjectNumber endl;

63; }

65; Этот оператор << будет вызываться для всех обьектов запчастей.

66; Его не нужно объявлять другом, поскольку он не обращается к закрытым данным.

67; Он вызывает метод DisplayO, в результате чего реализуется полиморфизм классов.

68: Было бы не плохо замещать функцию оператора для разных

69; типов thePart, но С++ не поддерживает контравариантность

70: ostream& operator ( ostream& theStream, Part& thePart)

71: {

72; thePart. DisplayO; косвенная реализация полиморфизма оператора вывода! 73; return theStream;

74; }



75 76 77 78 79 80 81 82 83 84 85 86 87

................ Саг Part ............

class CarPart : public Part {

public:

CarPartO :itsModelYear(94){ }

CarPart(int year, int partNumber);

int GetModelYear() const { return ItsModelYear; }

virtual void DisplayO const; private:

int ItsModelYear; } ;

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

itsModelYear(year),

Part(partNumber) { }

void CarPart:: DisplayO const {

Part::Display();

cout Model Year: ItsModelYear endl;

................ AirPlane Part ............

class AirPlanePart : public Part {

public:

AirPlanePart():ItsEngineNumber(1){ } ; AirPlanePart(int EngineNumber, int PartNumber); virtual void DisplayO const;

int GetEngineNumberOconst { return ItsEngineNumber; } private: int ItsEngineNumber;

AirPlanePart::AirPlanePart(int EngineNumber, int PartNumber):

itsEngineNumber(EngineNumber),

Part(PartNumber) { }

void AirPlanePart::Display() const {

Part;;DisplayO;

cout << Engine No.: << ItsEngineNumber << endl;

Обьявление класса List template <class T> class List;



********

126; **************** Node

127: Общий узел, который можно добавить к списку

128! ************************************ 129;

130; template <class Т>

131; class Node

132; {

133; public;

134; friend class List<T>;

135; Node (TO;

136; NodeO;

137; void SetNext(Node * node) { itsNext = node; }

138; Node * GetNextO const;

139; T GetObjectO const;

140; private;

141; T* itsObject;

142; Node * itsNext:

143; } ;

144;

145; Выполнение узла,.. 146;

147; template <olass T>

148; Node<T>;;Node(T pOJbect);

149; its0b]ect(p0]beot),

150; itsNext(O)

151; { }

152;

153; template <class T>

154; Node<T>;;-Node()

155; {

156; delete itsObject:

157; itsObject = 0;

158: delete itsNext; 159; itsNext = 0;

160; } 161;

162; Возвращает значение NULL, если нет следующего узла

163: template <class Т>

164; Node<T> ♦ Node<T>;;GetNextO const

165; {

166; return itsNext;

167; }

168;

169; template <class T>

170; T Node<T>;;GetObject() const

171; {

172; if (itsObject)

173; return itsObject;

174; else

175; throw NullNode();

176; }



1 ... 229 230 231 [ 232 ] 233 234 235 ... 265

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