|
Программирование >> Дополнительные возможности наследования
73 74 75 76 77 78 Dog fido; fido.SpeakO; fido.WagTaiK); cout Fido is << fido.GetAge() years old\ n return 0; } Mammal constructor... Dog constructor... Mammal sound! Tail wagging... Fido is 1 years old Dog destructor... Mammal destructor... Листинг 11.3 напоминает листинг 11.2 за тем исключением, что вызов конструктора и деструктора сопровождается сообщением об этом на экране. Сначала вызывается конструктор класса Mammal, затем класса Dog. После этого объект класса Dog полноценно существует и можно использовать все его методы. Когда выполнение программы выходит за область видимости объекта Fido, вызывается пара деструкторов, сначала из класса Dog, а затем из класса Mammal. Передача аргдментов в Оазовые констрдкторы Предположим, нужно перефузить конструкторы, заданные по умолчанию в классах Mammal и Dog, таким образом, чтобы первый из них сразу присваивал новому объекту определенный возраст, а второй - породу. Как передать в конструктор класса Mammal значения возраста и веса животного? Что произойдет, если вес не будет установлен конструктором класса Mammal, зато его установит конструктор класса Dog? Чтобы вьшолнить инициализацию базового класса, необходимо записать имя класса, после чего указать параметры, ожидаемые базовым классом, как показано в листинге 11.4. Лисшииг 11.4. Перегрузка кинсшрукширив в прпизввупых кдассах 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Листинг 11.4. Перегрузка конструкторов в производных классах #include <iostream.h> enum BREED { GOLDEN, CAIRN, DANDIE, SHETLAND, DOBERMAN, LAB } ; class Mammal { public: Конструкторы MammalO; Mammal(int age); MammalO; Методы доступа int GetAgeO const { return itsAge; } 16; void SetAge(int age) { itsAge = age: } 17: int GetWeightO const { return itsWeight; } 18: void SetWeight(int weight) { itsWeight = weight; ) 20: Другие методы 21: void Speak() const { cout Mammal sound!\ n ; } 22: void SleepO const { cout << shhh. Im sleeping.\ n ; } 25: protected: 26: int itsAge; 27: int itsWeight; 28: } ; 29: 30: class Dog : public Mammal 31: { 32: public: 34: Конструкторы 35: DogO; 36: Dogdnt age); 37: Dog(int age, int weight); 38: Dog(int age, BREED breed); 39: Dogdnt age, int weight, BREED breed); 40: DogO; 42: Методы доступа 43: BREED GetBreedO const { return itsBreed; } 44: void SetBreed(BREED breed) { itsBreed = breed; } 46: Другие методы 47: void WagTailO const { cout Tail wagging...\ n ; } 48: void BegForFoodO const { cout Begging for food...\ n 49: 50: private: 51: BREED itsBreed; 52: } ; 54: Mammal::Mammal(): 55: itsAge(l), 56: itsWeight(5) 57: { 58: cout Mammal constructor...\ n ; 59: } 61: Mammal::Mammal(int age): 62: itsAge(age), 63: itsWeight(5) 64: { 65: cout Mammal(int) constructor...\ n ; Mammal:; MammalO { cout Mafflmal destructor...\ n ; Dog::Dog(): MammalO, itsBreed(GOLDEN) { cout Dog constructor. \ n ; > Dog::Dog(int age): Mammal(age), itsBreed(GOLDEN) { cout Dog(int) constructor .\ n ; Dog::Dog(int age, int weight): Mammal(age), itsBreed(GOLDEN) itsWeight = weight; cout Dogdnt, int) constructor, ,. \ n ; > Dog::Dog(int age, int weight, BREED breed): Mafflfflal(age), itsBreed(breed) itsWeight = weight; cout Dogdnt, int, BREED) constructor, ,.\ n > Dog::Dog(int age, BREED breed): Mammal(age), itsBreed(breed) cout Dog(int, BREED) constructor...\ n ; Dog;: Dog() { cout Dog destructor...\ n ; > int mainO {
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |