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

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

Жанры

Освой самостоятельно С++ за 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):

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

Мир-о-творец

Ланцов Михаил Алексеевич
8. Помещик
Фантастика:
альтернативная история
5.00
рейтинг книги
Мир-о-творец

Имя нам Легион. Том 8

Дорничев Дмитрий
8. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 8

Грозовой замок

Мазуров Дмитрий
7. Громовая поступь
Фантастика:
фэнтези
героическая фантастика
рпг
5.00
рейтинг книги
Грозовой замок

Город Богов 3

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

Бракованная невеста. Академия драконов

Милославская Анастасия
Фантастика:
фэнтези
сказочная фантастика
5.00
рейтинг книги
Бракованная невеста. Академия драконов

Жандарм 4

Семин Никита
4. Жандарм
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Жандарм 4

Замуж второй раз, или Ещё посмотрим, кто из нас попал!

Вудворт Франциска
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Замуж второй раз, или Ещё посмотрим, кто из нас попал!

Белые погоны

Лисина Александра
3. Гибрид
Фантастика:
фэнтези
попаданцы
технофэнтези
аниме
5.00
рейтинг книги
Белые погоны

Ну, здравствуй, перестройка!

Иванов Дмитрий
4. Девяностые
Фантастика:
попаданцы
альтернативная история
6.83
рейтинг книги
Ну, здравствуй, перестройка!

Призыватель нулевого ранга. Том 2

Дубов Дмитрий
2. Эпоха Гардара
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Призыватель нулевого ранга. Том 2

Ассимиляция

Демидов Джон
4. Система компиляции
Фантастика:
рпг
фэнтези
5.00
рейтинг книги
Ассимиляция

Деспот

Шагаева Наталья
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Деспот

Леди для короля. Оборотная сторона короны

Воронцова Александра
3. Королевская охота
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Леди для короля. Оборотная сторона короны

Предопределение

Осадчук Алексей Витальевич
9. Последняя жизнь
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Предопределение