|
Программирование >> Дополнительные возможности наследования
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; }
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |