Чтение онлайн

на главную - закладки

Жанры

Освой самостоятельно С++ за 21 день.

Либерти Джесс

Шрифт:

Пример 1:

class Pegasus : public Horse, public Bird

Пример 2:

class Schnoodle : public Schnauzer, public Poodle

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

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

участие в его построении, как показано на рис. 13.1.

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

В случае использования множественного наследования возникает ряд непростых и весьма интересных вопросов. Например, что произойдет, если оба базовых класса будут иметь одно и то же имя либо содержать виртуальные функции или данные с одинаковыми именами? Как инициализируются конструкторы разных базовых классов? Что произойдет, если два базовых класса будут произведены от одного и того же родительского класса? Все эти вопросы будут рассмотрены в следующем разделе, после чего можно переходить к практическому использованию множественного наследования.

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

Если класс Pegasus производится от двух базовых классов — Bird и Horse, а в каждом из них объявлены конструкторы со списками параметров, то класс Pegasus инициализирует эти конструкторы. Как это происходит, показано в листинге 13.4.

Листинг 13.4. Создание объектов при множественном наследовании

1: // Листинг 13.4.

2: // Создание обьектов при множественном наследовании

3: #include <iostream.h>

4: typedef int HANDS;

5: enum COLOR { Red, Green, Blue, Yellow, White, Black, Brown };

6:

7: class Horse

8: {

9: public:

10: Horse(COLOR color, HANDS height);

11: virtual ~Horse { cout << "Horse destructor...\n"; }

12: virtual void Whinnyconst { cout << "Whinny!... "; }

13: virtual HANDS GetHeight const { return itsHeight; }

14: virtual COLOR GetColor const { return itsColor; }

15: private:

16: HANDS itsHeight;

17: COLOR itsColor;

18: };

19:

20: Horse::Horse(COLOR color, HANDSheight):

21: itsColor(color),itsHeight(height)

22: {

23: cout << "Horse constructor...\n";

24: }

25:

26: class Bird

27: {

28: public:

29: Bird(COLOR color, bool migrates);

30: virtual ~Bird { cout << "Bird destructor...\n"; }

31: virtual void Chirpconst { cout << "Chirp... "; }

32: virtual void Flyconst

33: {

34: cout << "I can fly! I can fly! I can fly! ";

35: }

36: virtual COLOR GetColorconst { return itsColor; }

37: virtual bool GetMigration const { return itsMigration; }

38:

39: private:

40: COLOR itsColor;

41: bool itsMigration;

42: };

43:

44: Bird::Bird(COLOR color, bool migrates):

45: itsColor(color), itsMigration(migrates)

46: {

47: cout << "Bird constructor...\n";

48: }

49:

50: class Pegasus : public Horse, public Bird

51: {

52: public:

53: void Chirpconst { Whinny; }

54: Pegasus(COLOR, HANDS, bool,long);

55: ~Pegasus { cout << "Pegasus destructor...\n";}

56: virtual long GetNumberBelievers const

57: {

58: return itsNumberBelievers;

59: }

60:

61: private:

62: long itsNumberBelievers;

63: };

64:

65: Pegasus::Pegasus(

66: COLOR aColor,

67: HANDS height,

68: bool migrates,

69: long NumBelieve):

70: Horse(aColor, height),

71: Bird(aColor, migrates),

72: itsNumberBelievers(NumBelieve)

73: {

74: cout << "Pegasus constructor...\n";

75: }

76:

77: int main

78: {

79: Pegasus *pPeg = new Pegasus(Red, 5, true, 10);

80: pPeg->Fly;

81: pPeg->Whinny;

82: cout << "\nYour Pegasus is " << pPeg->GetHeight;

83: cout << " hands tall and ";

84: if (pPeg->GetMigration)

85: cout << "it does migrate.";

86: else

87: cout << "it does not migrate.";

88: cout << "\nA total of " << pPeg->GetNumberBelievers;

89: cout << " people believe it exists.\n";

90: delete pPeg;

91: return 0;

92: }

Результат:

Horse constructor...

Bird constructor...

Pegasus constructor...

I can fly! I can fly! I can fly! Whinny!...

Your Pegasus is 5 hands tall and it does migrate.

A total of 10 people believe it exists.

Pegasus destructor...

Bird destructor...

Horse destructor...

Анализ:

Класс Horse объявляется в строках 7—18. Конструктор этого класса принимает два параметра: один из них — это перечисление, объявленное в строке 5, а второй — новый тип, объявленный с помощью typedef в строке 4. Этот конструктор выполняется в строках 20—24. При этом инициализируется одна переменная-член и на экран выводится сообщение о работе конструктора класса Horse.

Поделиться:
Популярные книги

Боги, пиво и дурак. Том 4

Горина Юлия Николаевна
4. Боги, пиво и дурак
Фантастика:
фэнтези
героическая фантастика
попаданцы
5.00
рейтинг книги
Боги, пиво и дурак. Том 4

Попаданка для Дракона, или Жена любой ценой

Герр Ольга
Любовные романы:
любовно-фантастические романы
7.17
рейтинг книги
Попаданка для Дракона, или Жена любой ценой

Клан, которого нет. Незримый союзник

Муравьёв Константин Николаевич
6. Пожиратель
Фантастика:
фэнтези
6.33
рейтинг книги
Клан, которого нет. Незримый союзник

Отверженный III: Вызов

Опсокополос Алексис
3. Отверженный
Фантастика:
фэнтези
альтернативная история
7.73
рейтинг книги
Отверженный III: Вызов

Случайная свадьба (+ Бонус)

Тоцка Тала
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Случайная свадьба (+ Бонус)

Лучший из худших

Дашко Дмитрий
1. Лучший из худших
Фантастика:
фэнтези
попаданцы
5.25
рейтинг книги
Лучший из худших

Кодекс Крови. Книга ХIV

Борзых М.
14. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга ХIV

Контракт на материнство

Вильде Арина
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Контракт на материнство

Измена. Свадьба дракона

Белова Екатерина
Любовные романы:
любовно-фантастические романы
эро литература
5.00
рейтинг книги
Измена. Свадьба дракона

Сын Петра. Том 1. Бесенок

Ланцов Михаил Алексеевич
1. Сын Петра
Фантастика:
попаданцы
альтернативная история
6.80
рейтинг книги
Сын Петра. Том 1. Бесенок

Идеальный мир для Лекаря 17

Сапфир Олег
17. Лекарь
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 17

Солнечный корт

Сакавич Нора
4. Все ради игры
Фантастика:
зарубежная фантастика
5.00
рейтинг книги
Солнечный корт

Сломанная кукла

Рам Янка
5. Серьёзные мальчики в форме
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Сломанная кукла

Зомби

Парсиев Дмитрий
1. История одного эволюционера
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Зомби