|
Программирование >> Дополнительные возможности наследования
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 Glass Animal Общий базовый класс для классов Mammal и Fish { public: Anifflal(int); virtual AnimalO { cout << Animal destructor...\ n ; } virtual int GetAgeO const { return itsAge; } virtual void SetAge(int age) { itsAge = age; > virtual void SleepO const = 0; virtual void Eat() const = 0; virtual void ReproduceO const = 0; virtual void Move() const = 0; virtual void SpeakO const = 0; private; int itsAge; } ; Animal::Animal(int age): itsAge(age) cout << Animal constructor...\ n ; class Mammal : public Animal { public; Mammal(int age):Animal(age) { cout << Mammal constructor,..\ n ;} virtual MammalO { cout << Mammal destructor. ..\ n ;} virtual void ReproduceO const { cout Mammal reproduction depicted...\ n ; } class Fish : public Animal { public: Fish(int age):Animal(age) { cout Fish constructor...\ n ;} virtual FishO { cout << Fish destructor. . .\ n ; } virtual void SleepO const { cout fish snoring...\ n ; } virtual void Eat() const { cout fish feeding...\ n ; } virtual void ReproduceO const { cout << fish laying eggs,..\ n ; } virtual void Move() const { cout << fish swimming...\ n ; } virtual void SpeakO const { } } ; class Horse : public Mammal { 56: public; 57; Horse(int age, COLOR color ): 58: Mammal(age), itsColor(color) 59: { cout Horse constructor..,\ n ; } 60: virtual HorseO { cout Horse destructor. .. \ n ; } 6V. virtual void SpeakOconst { cout << Whinny!. \ n ; } 62: virtual COLOR GetItsColor() const { return itsColor; } 63: virtual void SleepO const 64: { cout Horse snoring...\ n ; } 65: virtual void Eat() const { cout Horse feeding...\ n ; } 66: virtual void MoveO const { cout << Horse running...\ n ;} 67: 68: protected: 69: COLOR itsColor; 70: > ; 72: class Dog : public Mammal 73: { 74: public: 75: Dog(int age, COLOR color ): 76: Mammal(age), itsColor(color) 77: { cout Dog constructor...\ n ; } 78: virtual DogO { cout Dog destructor... \ n ; } 79: virtual void SpeakOconst { cout Woof! . \ n ; } 80: virtual void Sleep() const { cout << Dog snoring...\ n ; } 81: virtual void EatO const { cout Dog eating...\ n ; } 82: virtual void MoveO const { cout Dog running...\ n ; } 83: virtual void ReproduceO const 84: { cout Dogs reproducing...\ n ; } 86: protected: 87: COLOR itsColor; 88: } ; 90: int mainO 91: { 92: Animal pAnimal=0; 93: int choice; 94; bool fOuit = false; 96: while (1) 97: { 98: cout (1)Dog (2)Horse (3)Fish (O)Quit: ; 99: cin choice; 100: 101: switch (choice) 102:, { 103: case 1: pAnimal = new Dog(5,Brown); 104: break; 105: case 2: pAnimal = new Horse(4,Black); 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 break; case 3: pAnimal = new Fish (5); break; default: fOuit = true; break; if (fOuit) break; pAnimal->Speak(); pAnimal->Eat(); pAnimal->Repreduce(); pAnimal->Move(); pAnimal->Sleep(); delete pAnimal; cout << \ n ; return 0; v., (1)Dog (2)Horse (3)Bird (O)Ouit: 1 Animal constructor. , . Mammal constructor,.. Dog constructor... Woof!... Dog eating.,. Dog reproducing.... Dog running... Dog snoring. . . Dog destructor... Mammal destructor... Animal destructor... (1)Dog (2)Horse (3)Bird (O)Ouit: 0 В строках 7-21 объявляется абстрактный тип данных Animal. Единственнъш метод этого класса, не являющийся чистой виртуальной функцией, это общий для обьектов всех производных классов метод itsAge. Остальные пять методов - SleepO, EatO, ReproduceO, Move() и SpeakO - объявлены как чистые виртуальные функции. Класс Mammal производится от Animal в строках 29-37 и не содержит никаких данных. В нем замещается функция ReproduceO, чтобы задать способ размножения, общий для всех млекопитающих. Класс Fish производится непосредственно от класса Animal, поэтому функция ReproduceO в нем замещается иначе, чем в классе Mammal (и это соответствует реальности). Во всех других классах, производимых от класса Mammal, теперь нет необходимости замещать общий для всех метод ReproduceO, хотя при желании это можно сделать для определенного класса, как, например, в нашей программе это было сделано в строке 83 для класса Dog. Все остальные чистые виртуальные функции были замещены в классах Fish, Horse и Dog, поэтому для каждого из них можно создавать соответствующие объекты.
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |