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

1 ... 118 119 120 [ 121 ] 122 123 124 ... 265


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 56 57 58 59 60 61

private:

int itsAge; } ;

class Bird public:

BirdO { cout << Bird constructor . ; } virtual BirdO { cout Bird destructor... ; } virtual void ChirpO const { cout Chirp... ; } virtual void FlyO const {

cout << I can fly! I can fly! I can fly! ;

private:

int itsWeight; } ;

class Pegasus : public Horse, public Bird {

public:

void ChirpO const { WhinnyO; } PegasusO { cout Pegasus constructor... ; } PegasusO { cout Pegasus destructor... ; } } ;

const int MagicNumber = 2;

int mainO

Horse* Ranch[MagicNumber]; Bird* Aviary[MagicNumber]; Horse * pHorse; Bird pBird; int choice,1;

for (i=0; KMagicNumber; i++) {

cout \ n(1)Horse (2)Pegasus: ; cin choice; if (choice == 2)

pHorse = new Pegasus; else

pHorse = new Horse; Ranch[i] = pHorse;

for (1=0; KMagicNumber; i++) {

cout \ n(l)Bird (2)Pegasus: ; cin choice; if (choice =- 2) pBird = new Pegasus;



else

pBird = new Bird;

Aviary[i] = pBird;

>

cout \ n ;

for (1=0; KMagicNumber;

i++)

cout \ nRanch[ i

];

Ranch[i]->Whinny();

delete Ranch[i];

>

for (i=0; KMagicNumber;

i++)

cout X nAviary[

i ]

Aviary[i]->Chirp();

Aviary[i]->Fly();

delete Aviary[i];

>

return 0;

(l)Horse (2)Pegasus

Horse constructor..

(l)Horse (2)Pegasus

Horse constructor..

. Bird

(l)Bird (2)Pegasus:

Bird constructor. ..

(1)Bird (2)Pegasus:

Horse constructor..

. Bird

Ranch[0]: Whinny!. Ranch[1]: Whinny!. Horse destructor.. Aviary[0]: Chirp.. Aviary[1]: Whinny! Pegasus destructor

Pegasus constructor...

tructor... Pegasus constructor. . . , Horse destructor...

. Pegasus destructor... Bird destructor...

I can fly! I can fly! I can fly! Bird destructor. . I can fly! I can fly! I can fly! ,. Bird destructor... Horse destructor...

В строках 6-14 объявляется класс Horse. Конструктор и деструктор выводят на экран сообщения о своей работе, а метод WhinnyO печатает Whinny! (И-го-го).

Класс Bird объявляется в строках 16-28. В дополнение к своим конструктору и деструктору этот класс содержит два метода: ChirpO и Fly(), каждый из которых выводит на экран соответствующие сообщения. В реальных программах эти методы могут воспроизводить определенный звуковой файл или управлять анимационными эффектами на экране.



Наконец, в строках 30-36 объявляется класс Pegasus. Он производится сразу от двух базовых классов - Bird и Horse. В классе замещается метод ChirpO таким образом, что вызывается метод WhinnyO, который унаследован этим классом от класса Horse.

Создается два списка: Ranch (конюшня), который в строке 41 связывается с классом Horse, и Aviary (птичник), который в строке 42 связывается с классом Bird. В строках 46-55 в список Ranch добавляются два объекта - Horse и Pegasus. В строках 56-65 в список Aviary добавляются объекты Bird и Pegasus.

Вызовы виртуальных методов с помощью указателей классов Bird и Horse одинаково выполняются для объекта Pegasus. Например, в строке 78 метод ChirpO вызывается последовательно для всех объектов, указатели на которые представлены в массиве Aviary. Поскольку этот метод объявлен в классе Bird как виртуальный, он правильно выполняется для всех объектов списка.

По выйЬдимым на экран строкам можно заключить, что при создании объекта Pegasus вызываются конструкторы всех трех классов - Bird, Horse и Pegasus, каждый из которых создает свою часть объекта. При удалении объекта также удаляются его части, относящиеся к классам Bird и Horse, для чего деструкторы в этих классах объявлены как виртуальные.

Объявление множественного наследовоння

Чтобы указать, что создаваемый объект наследует свойства более чем одного базового класса, после имени создаваемого класса ставится двоеточие, вслед за которым через запятую перечислены имена всех базовых классов.

Пример 1:

ielassifiegasus : public Horse, public Bird

Пример 2:

class Schnoodle

public Schnauzer, public Poodle

Из каких частей состоят оОъвкты, полученные в рвзудьтатв множвстввнного наследования

Когда в памяти компьютера создается объект Pegasus, конструкторы обоих классов принимают участие в его построении, как показано на рис. 13.1.


Рис. 13.1. Объект, полученный в результате множественного наследования



1 ... 118 119 120 [ 121 ] 122 123 124 ... 265

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