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

на главную

Жанры

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

Решетов Евгений Валерьевич
2. Жребий некроманта
Фантастика:
боевая фантастика
6.87
рейтинг книги
Жребий некроманта 2

Вперед в прошлое 6

Ратманов Денис
6. Вперед в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Вперед в прошлое 6

Архил...? Книга 2

Кожевников Павел
2. Архил...?
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Архил...? Книга 2

Чемпион

Демиров Леонид
3. Мания крафта
Фантастика:
фэнтези
рпг
5.38
рейтинг книги
Чемпион

Назад в СССР 5

Дамиров Рафаэль
5. Курсант
Фантастика:
попаданцы
альтернативная история
6.64
рейтинг книги
Назад в СССР 5

Я граф. Книга XII

Дрейк Сириус
12. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я граф. Книга XII

Матабар

Клеванский Кирилл Сергеевич
1. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар

Титан империи 3

Артемов Александр Александрович
3. Титан Империи
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Титан империи 3

Темный Охотник

Розальев Андрей
1. КО: Темный охотник
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Темный Охотник

Вираж бытия

Ланцов Михаил Алексеевич
1. Фрунзе
Фантастика:
героическая фантастика
попаданцы
альтернативная история
6.86
рейтинг книги
Вираж бытия

Мастер Разума II

Кронос Александр
2. Мастер Разума
Фантастика:
героическая фантастика
попаданцы
аниме
5.75
рейтинг книги
Мастер Разума II

Кодекс Охотника. Книга VII

Винокуров Юрий
7. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
4.75
рейтинг книги
Кодекс Охотника. Книга VII

Большие дела

Ромов Дмитрий
7. Цеховик
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Большие дела

Я тебя верну

Вечная Ольга
2. Сага о подсолнухах
Любовные романы:
современные любовные романы
эро литература
5.50
рейтинг книги
Я тебя верну