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

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

Жанры

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

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

Шрифт:

38: BREED GetBreed const { return itsBreed; }

39: void SetBreed(BREED breed) { itsBreed = breed; }

40:

41: // Другие методы

42: void WagTail const { cout << "Tail wagging...\n"; }

43: void BegForFood const { cout << "Begging for food...\n"; }

44:

45: private:

46: BREED itsBreed;

47: };

48:

49: Mammal::Mammal:

50: itsAge(1),

51: itsWeight(5)

52: {

53: cout << "Mammal constructor...\n";

54: }

55:

56: Mammal::~Mammal

57: {

58: cout << "Mammal destructor...\n";

59: }

60:

61: Dog::Dog:

62: itsBreed(GOLDEN)

63: {

64: cout << "Dog constructor...\n";

65: }

66:

67: Dog::~Dog

68: {

69: cout << "Dog destructor...\n";

70: }

71: int main

72: {

73: Dog fido;

74: fido.Speak;

75: fido.WagTail;

76: cout << "Fido is " << fido.GetAge << " years old\n":

77: return 0;

78: }

Результат:

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. Перегрузка конструкторов в производных классах

1: //Листинг 11.4. Перегрузка конструкторов в производных классах

2:

3: #include <iostream.h>

4: enum BREED { GOLDEN, CAIRN, DANDIE, SHETLAND, D0BERMAN, LAB };

5:

6: class Mammal

7: {

8: public:

9: //

Конструкторы

10: Mammal;

11: Mammal(int age);

12: ~Mammal;

13:

14: // Методы доступа

15: int GetAge const { return itsAge; }

16: void SetAge(int age) { itsAge = age; }

17: int GetWeight const { return itsWeight; }

18: void SetWeight(int weight) { itsWeight = weight; }

19:

20: //Другие методы

21: void Speak const { cout << "Mammal sound!\n"; }

22: void Sleep const { cout << "shhh. I'm sleeping.\n"; }

23:

24:

25: protected:

26: int itsAge;

27: int itsWeight;

28: };

29:

30: class Dog : public Mammal

31: {

32: public:

33:

34: // Конструкторы

35: Dog;

36: Dog(int age);

37: Dog(int age, int weight);

38: Dog(int age, BREED breed);

39: Dog(int age, int weight, BREED breed);

40: ~Dog;

41:

42: // Методы доступа

43: BREED GetBreed const { return itsBreed; }

44: void SetBreed(BREED breed) { itsBreed = breed; }

45:

46: // Другие методы

47: void WagTail const { cout << "Tail wagging,..\n"; }

48: void BegForFood const { cout << "Begging for food...\n"; }

49:

50: private:

51: BREED itsBreed;

52: };

53:

54: Mammal::Mammal:

55: itsAge(1),

56: itsWeight(5)

57: {

58: cout << "Mammal constructor...\n";

59: }

60:

61: Mammal::Mammal(int age):

62: itsAge(age),

63: itsWeight(5)

64: {

65: cout << "Mammal(int) constructor...\n";

66: }

67:

68: Mammal::~Mammal

69: {

70: cout << "Mammal destructor...\n";

71: }

72:

73: Dog::Dog;

74: Mammal,

75: itsBreed(GOLDEN)

76: {

77: cout << "0og constructor...\n";

78: }

79:

80: Dog::Dog(int age):

81: Mammal(age),

82: itsBreed(GOLDEN)

83: {

84: cout << "Dog(int) constructor...\n";

85: }

86:

87: Dog::Dog(int age, int weight):

88: Mammal(age),

89: itsBreed(GOLDEN)

90: {

91: itsWeight = weight;

92: cout << "Dog(int, int) constructor...\n";

93: }

94:

95: Dog::Dog(int age, int weight, BREED breed):

96: Mammal(age),

97: itsBreed(breed)

98: {

99: itsWeight = weight;

100: cout << "Dog(int, int, BREED) constructor...\n";

101: }

102:

103: Dog::Dog(int age, BREEDbreed):

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

Пять попыток вспомнить правду

Муратова Ульяна
2. Проклятые луной
Фантастика:
фэнтези
эпическая фантастика
5.00
рейтинг книги
Пять попыток вспомнить правду

Ведьмак (большой сборник)

Сапковский Анджей
Ведьмак
Фантастика:
фэнтези
9.29
рейтинг книги
Ведьмак (большой сборник)

Вечный. Книга I

Рокотов Алексей
1. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга I

Жена на четверых

Кожина Ксения
Любовные романы:
любовно-фантастические романы
эро литература
5.60
рейтинг книги
Жена на четверых

Ну привет, заучка...

Зайцева Мария
Любовные романы:
эро литература
короткие любовные романы
8.30
рейтинг книги
Ну привет, заучка...

Корпулентные достоинства, или Знатный переполох. Дилогия

Цвик Катерина Александровна
Фантастика:
юмористическая фантастика
7.53
рейтинг книги
Корпулентные достоинства, или Знатный переполох. Дилогия

Повелитель механического легиона. Том VII

Лисицин Евгений
7. Повелитель механического легиона
Фантастика:
технофэнтези
аниме
фэнтези
5.00
рейтинг книги
Повелитель механического легиона. Том VII

Печать пожирателя 2

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

Ты - наша

Зайцева Мария
1. Наша
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Ты - наша

Город Богов 3

Парсиев Дмитрий
3. Профсоюз водителей грузовых драконов
Фантастика:
юмористическое фэнтези
городское фэнтези
попаданцы
5.00
рейтинг книги
Город Богов 3

Новый Рал 5

Северный Лис
5. Рал!
Фантастика:
попаданцы
5.00
рейтинг книги
Новый Рал 5

Мама из другого мира...

Рыжая Ехидна
1. Королевский приют имени графа Тадеуса Оберона
Фантастика:
фэнтези
7.54
рейтинг книги
Мама из другого мира...

Черный Маг Императора 9

Герда Александр
9. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 9

Ученичество. Книга 1

Понарошку Евгений
1. Государственный маг
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Ученичество. Книга 1