Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «Освой ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π‘++ Π·Π° 21 дСнь.Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 68

Автор ДТСсс Π›ΠΈΠ±Π΅Ρ€Ρ‚ΠΈ

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π² Π±Π°Π·ΠΎΠ²Ρ‹Π΅ конструкторы

 ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ конструкторы, Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² классах 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):

104: Mammal(age),

105: itsBreed(breed)

106: {

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

108: }

109:

110: Dog::~Dog()

111: {

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

113: }

114: int main()

115: {

116:    Dog fido;

117:    Dog rover(5);

118:    Dog buster(6,8);

119:    Dog yorkie (3,GOLDEN);

120:    Dog dobbie (4,20,DOBERMAN);

121:    fido.Speak();

122:    rover.WagTail();

123:    cout << "Yorkie is " << yorkie.GetAge() << " years old\n";

124:    cout << "Dobbie weighs ";

125:    cout << dobbie.GetWeight() << " pounds\n";

126:    return 0;

127: }


ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅:Для удобства дальнСйшСго Π°Π½Π°Π»ΠΈΠ·Π° строки Π²Ρ‹Π²ΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° экран ΠΏΡ€ΠΎΠ½ΡƒΠΌΠ΅Ρ€ΠΎΠ²Π°Π½Ρ‹.


Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

1: Mammal constructor...

2: Dog constructor...

3: Mammal(int) constructor...

4: Dog(int) constructor...

5: Mammal(int) constructor...

6: Dog(int, int) constructor...

7: Mammal(int) constructor...

8: Dog(int, BREED) constructor....

9: Mammal(int) constructor...

10: Dog(int, int, BREED) constructor...

11: Mammal sound!

12: Tail wagging...

13: Yorkie is 3 years old.

14: Dobbie weighs 20 pounds.

15: Dog destructor..,

16: Mammal destructor...

17: Dog destructor...

18: Mammal destructor...

19: Dog destructor...

20: Mammal destructor...

21: Dog destructor...

22: Mammal destructor...

23: Dog destructor, . .

24: Mammal destructor...


Анализ: Π’ листингС 11.4 конструктор класса Mammal ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½ Π² строкС 11 Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ цСлочислСнныС значСния возраста ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ³ΠΎ. Π’ строках 61β€”66 происходит инициализация ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ itsAge Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 5, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΌ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ конструктора.

Π’ классС Dog Π² строках 35β€”39 создаСтся ΠΏΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… конструкторов. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ β€” это конструктор, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ возраст ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ для этого Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, Ρ‡Ρ‚ΠΎ ΠΈ конструктор класса Mammal. Π’Ρ€Π΅Ρ‚ΠΈΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ возраст ΠΈ вСс, Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ β€” возраст ΠΈ ΠΏΠΎΡ€ΠΎΠ΄Ρƒ, Π° пятый β€” возраст, вСс ΠΈ ΠΏΠΎΡ€ΠΎΠ΄Ρƒ.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² строкС 74 конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ класса Dog Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ класса Mammal. Π₯отя Π² этом Π½Π΅Ρ‚ нСобходимости, Π½ΠΎ данная запись лишний Ρ€Π°Π· Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ конструктор, Π½Π΅ содСрТащий ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ конструктор Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ Π² любом случаС, Π½ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΉ строкС это Π±Ρ‹Π»ΠΎ сдСлано явно.

Π’ строках 80β€”85 выполняСтся конструктор класса Dog, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄Π½ΠΎ цСлочислСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’ΠΎ врСмя ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ (строки 81 ΠΈ 82) возраст принимаСтся ΠΈΠ· Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Π² Π²ΠΈΠ΄Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, послС Ρ‡Π΅Π³ΠΎ присваиваСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ€ΠΎΠ΄Ρ‹.

Π”Ρ€ΡƒΠ³ΠΎΠΉ конструктор класса Dog выполняСтся Π² строках 87β€”93. Π­Ρ‚ΠΎΡ‚ конструктор ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°. ΠŸΠ΅Ρ€Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ вновь инициализируСтся ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ ΠΊ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ конструктору Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ бСрСтся ΠΈΠ· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса itsWeight самим конструктором класса Dog. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ присвоСниС значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ Π½Π° стадии ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ конструктора ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ класса. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² классС Mammal Π½Π΅Ρ‚ конструктора, ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ρ‚ΠΎ присвоСниС значСния Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² Ρ‚Π΅Π»Π΅ конструктора класса Dog.

Π‘Π°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… конструкторов Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΊΡ€Π΅ΠΏΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ знания. ΠžΠ±Ρ€Π°Ρ‰Π°ΠΉΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ с ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ конструктора, Π° Π² ΠΊΠ°ΠΊΠΈΡ… случаях ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ слСдуСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π² Ρ‚Π΅Π»Π΅ конструктора.

Для удобства Π°Π½Π°Π»ΠΈΠ·Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ строки Π²Ρ‹Π²ΠΎΠ΄Π° Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΎΠ½ΡƒΠΌΠ΅Ρ€ΠΎΠ²Π°Π½Ρ‹. ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π΅ строки Π²Ρ‹Π²ΠΎΠ΄Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Fido с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ конструкторов, Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ 3 ΠΈ 4 ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ созданию ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° rover, Π° строки 5 ΠΈ 6 β€” ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° buster. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² послСднСм случаС ΠΈΠ· конструктора класса Dog с двумя цСлочислСнными ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ происходит Π²Ρ‹Π·ΠΎΠ² конструктора класса Mammal, содСрТащСго ΠΎΠ΄ΠΈΠ½ цСлочислСнный ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€.

ПослС создания всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΈΡ… ΠΈ Π½Π°ΠΊΠΎΠ½Π΅Ρ† Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости этих ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° сопровоТдаСтся ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ ΠΊ дСструктору класса Dog, послС Ρ‡Π΅Π³ΠΎ слСдуСт ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ дСструктору класса Mammal.

Π—Π°ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ класса Dog ΠΈΠΌΠ΅Π΅Ρ‚ доступ ΠΊΠΎ всСм функциям-Ρ‡Π»Π΅Π½Π°ΠΌ класса Mammal, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΊ любой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρƒ, Ρ‡ΡŒΠ΅ объявлСниС Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π² класс Dog, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ WagTaill(). Но ΠΊΡ€ΠΎΠΌΠ΅ этого, Π±Π°Π·ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΌΠ΅Ρ‰Π΅Π½Ρ‹ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ классС. Под Π·Π°ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ΠΌ Π±Π°Π·ΠΎΠ²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΅Π΅ выполнСния Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ классС для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², созданных Π² этом классС.

Если Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ классС создаСтся функция с Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΎΠΌ ΠΈ сигнатурой ΠΊΠ°ΠΊ ΠΈ Π² Π±Π°Π·ΠΎΠ²ΠΎΠΌ классС, Π½ΠΎ выполняСмая особым ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‚ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ мСсто Π·Π°ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

Π’ случаС замСщСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒΡΡ соотвСтствиС ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΈΠΏΠΎΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΈ сигнатурой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² Π±Π°Π·ΠΎΠ²ΠΎΠΌ классС. Под сигнатурой ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚ установки, Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π΅Π΅ имя, список ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ, Π² случаС использования, ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово const.

Π’ листингС 11.5 ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π·Π°ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π² классС Dog Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Speak(), объявлСнной Π² классС Mammal. Для экономии мСста Π·Π½Π°ΠΊΠΎΠΌΡ‹Π΅ ΠΏΠΎ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ листингам объявлСния ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² доступа Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π±Ρ‹Π»ΠΈ ΠΎΠΏΡƒΡ‰Π΅Π½Ρ‹.

Листинг 11.5. Π—Π°ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ классС

1: //Листинг 11.5. Π—Π°ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ классС

2:

3: #include <iostream.h>

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

5:

6: class Mammal

7: {

8:    public:

9:       // ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹

10:      Mammal() { cout << "Mammal constructor...\n"; }

11:      ~Mammal() { cout << "Mammal destructor...\n"; }

12:

13:      //Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹

14:      void Speak()const { cout << "Mammal sound!\n"; }

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

16:

17:

18:   protected:

19:  int itsAge;

20:      int itsWeight;

21: };

22:

23: class Dog : public Mammal

24: {