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

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

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

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ класса Pegasus ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²: Ρ†Π²Π΅Ρ‚ ΠΊΡ€Ρ‹Π»Π°Ρ‚ΠΎΠ³ΠΎ коня, Π΅Π³ΠΎ рост (Π² Ρ„ΡƒΡ‚Π°Ρ…); Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, которая опрСдСляСт, ΠΌΠΈΠ³Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ сСйчас это ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ΅ ΠΈΠ»ΠΈ ΠΌΠΈΡ€Π½ΠΎ пасСтся Π½Π° пастбищС; число людСй, вСрящих Π² сущСствованиС ПСгаса,

ΠΈ возраст ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ³ΠΎ. Π’ строкС 87 конструктор ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² классС Horse (Ρ†Π²Π΅Ρ‚, рост ΠΈ возраст). Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ строкС инициализируСтся Ρ‡Π°ΡΡ‚ΡŒ, относящаяся ΠΊ классу Bird: Ρ†Π²Π΅Ρ‚, ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ ΠΈ возраст. НаконСц, Π² строкС 89 инициализируСтся пСрСмСнная itsNumberBelievers, относящаяся нСпосрСдствСнно ΠΊ классу Pegasus.

Π’Ρ‹Π·ΠΎΠ² конструктора класса Horse Π² строкС 87 выполняСт ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, записанныС Π² строкС 38. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° age конструктор класса Horse ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ itsAge, ΡƒΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π½ΡƒΡŽ классом Horse ΠΎΡ‚ класса Animal. Π—Π°Ρ‚Π΅ΠΌ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π΄Π²Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅-Ρ‡Π»Π΅Π½Π° класса Horse β€” itsColor ΠΈ itsHeight.

Π’Ρ‹Π·ΠΎΠ² конструктора класса Bird Π² строкС 88 выполняСт ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, записанныС Π² строкС 60. И Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ age ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ-Ρ‡Π»Π΅Π½Π°, унаслСдованной классом Bird ΠΎΡ‚ класса Animal.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ†Π²Π΅Ρ‚Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Pegasus ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…-Ρ‡Π»Π΅Π½ΠΎΠ² ΠΎΠ±ΠΎΠΈΡ… классов, Bird ΠΈ Horse. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ age Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ itsAge ΠΎΠ±ΠΎΠΈΡ… этих классов, ΡƒΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΈΠΌΠΈ ΠΎΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Animal.

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ наслСдованиС

Π’ листингС 13.5 Ρ€Π΅ΡˆΠ°Π»Π°ΡΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° нСопрСдСлСнности, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ: ΠΎΡ‚ ΠΊΠ°ΠΊΠΎΠ³ΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса унаслСдована функция getAge() Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ класса Pegasus. Но Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ производится ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±Ρ‰Π΅Π³ΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Animal.

Π’ C++ сущСствуСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π΅Π»ΠΎ Π½Π΅ с двумя ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ классами, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² рис. 13.2, Π° с ΠΎΠ΄Π½ΠΈΠΌ ΠΎΠ±Ρ‰ΠΈΠΌ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ классом (рис. 13.3).



Рис. 13.3. Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ наслСдованиС


Для этого класс Animal Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс для Π΄Π²ΡƒΡ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… классов, Horse ΠΈ Bird. Класс Animal ΠΏΡ€ΠΈ этом Π½Π΅ подвСргаСтся Π½ΠΈΠΊΠ°ΠΊΠΈΠΌ измСнСниям. Π’ классах Horse ΠΈ Bird измСнСния состоят Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΈΡ… объявлСнии указываСтся Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ наслСдования ΠΎΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Animal. Класс Pegasus измСняСтся сущСствСнно.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ конструктор класса ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ собствСнныС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅-Ρ‡Π»Π΅Π½Ρ‹ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса. Из этого ΠΏΡ€Π°Π²ΠΈΠ»Π° дСлаСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ наслСдованиС. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ основного Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ конструкторами Π½Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… ΠΎΡ‚ Π½Π΅Π³ΠΎ классов, Π° Ρ‚Π΅Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ послСдними Π² ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ классов. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ класс Animal инициализируСтся Π½Π΅ конструкторами классов Horse ΠΈ Bird, Π° конструктором класса Pegasus. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ классов Horse ΠΈ Bird Ρ‚Π°ΠΊΠΆΠ΅ содСрТат ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса Animal, Π½ΠΎ ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Pegasus эта инициализация пСрСкрываСтся конструктором Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса.

Листинг 13.6 прСдставляСт собой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈΠ· листинга 13.5, пСрСписанный Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ прСимущСствами Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ наслСдования.

Листинг. 13.6. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ наслСдования

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

2: // Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ наслСдованиС

3: #include <iostream.h>

4:

5: typedef int HANDS;

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

7:

8: class Animal // ΠΎΠ±Ρ‰ΠΈΠΉ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс для Π΄Π²ΡƒΡ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… классов horse ΠΈ bird

9: {

10:   public:

11:      Animal(int);

12:      virtual ~Animal() { cout << "Animal destructor...\n"; }

13:      virtual int GetAge() const { return itsAge; }

14:      virtual void SetAge(int age) { itsAge = age; )

15:   private:

16:      int itsAge;

17: };

18:

19: Animal::Animal(int age):

20:    itsAge(age)

21: {

22:    cout << "Animal constructor...\n";

23: }

24:

25: class Horse : virtual public Animal

26: {

27:    public:

28:       Horse(C0L0R color, HANDS height, int age);

29:       virtual ^Horse() { cout << "Horse destructor...\n"; }

30:       virtual void Whinny()const { cout << "Whinny!... "; }

31:       virtual HANDS GetHeight() const { return itsHeight; }

32:       virtual COLOR GetColor() const { return itsColor; }

33:    protected:

34:       HANDS itsHeight;

35:       COLOR itsColor;

36: };

37:

38: Horse::Horse(C0L0R color, HANDS height, intage):

39:    Animal(age),

40:    itsColor(color),itsHeight(height)

41: {

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

43: }

44:

45: class Bird : virtual public Animal

46: {

47:    public:

48:       Bird(COLOR color, bool migrates, int age);

49:       virtual ~Bird() { cout << "Bird destructor...\n"; }

50:       virtual void Chirp()const { cout << "Chirp... "; }

51:       virtual void Fly()const

52:          { cout << "I can fly! I can fly! I can fly! "; }

53:       virtual COLOR GetColor()const { return itsColor; }

54:       virtual bool GetMigration() const { return itsMigration; }

55:    protected:

56:       COLOR itsColor;

57:       bool itsMigration;

58: };

59:

60: Bird;:Bird(COLOR color, bool migrates, int age):

61:    Animal(age),

62:    itsColor(color), itsMigration(migrates)

63: {

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

65: }

66:

67: class Pegasus : public Horse, public Bird

68: {

69:    public:

70:       void Chirp()const { Whinny(); }

71:       Pegasus(COLOR, HANDS, bool, long, int);

72:       virtual ~Pegasus() { cout << "Pegasus destructor...\n";}

73:       virtual long GetNumberBelievers() const

74:          { return itsNumberBelievers; }

75:       virtual COLOR GetColor()const { return Horse::itsColor; }

76:    private:

77:       long itsNumberBelievers;

78: };

79:

80: Pegasus::Pegasus(

81:    COLOR aColor,

82:    HANDS heigbt,

83:    bool migrates,

84:    long NumBelieve,

85:    int age):

86: Horse(aColor, height,age),

87: Bird(aColor, migrates,age),

88: Animal(age*2),

89: itsNumberBelievers(NumBelieve)

90: {

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

92: }

93:

94: int main()

95: {

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

97:    int age = pPeg->GetAge();

98:    cout << "This pegasus is " << age << " years old.\n";

99:    delete pPeg:

100:   return 0;

101: }


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

Animal constructor...

Horse constructor...

Bird constructor. . .

Pegasus constructor...

Tnis pegasus is 4 years old.

Pegasus destructor...

Bird destructor...

Horse destructor...

Animal destructor...


Анализ: Π’ строкС 25 класс Horse Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ наслСдуСтся ΠΎΡ‚ класса Animal, Π° Π² строкС 45 Ρ‚Π°ΠΊ ΠΆΠ΅ наслСдуСтся класс Bird. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ конструкторы ΠΎΠ±ΠΎΠΈΡ… классов ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ класс Animal. Но ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ создаСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Pegasus, конструктор этого класса Π·Π°Π½ΠΎΠ²ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ класс Animal, отмСняя ΠΏΡ€Π΅ΠΆΠ½ΠΈΠ΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π£Π±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² этом Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ, Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ Π½Π° экран. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ itsAge присваиваСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 2, Π½ΠΎ конструктор класса Pegasus ΡƒΠ΄Π²Π°ΠΈΠ²Π°Π΅Ρ‚ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ строка 98 ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π½Π° экран Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 4.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ наслСдования ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² классС Pegasus большС Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ GetAge() наслСдуСтся нСпосрСдствСнно ΠΈΠ· класса Animal. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ GetColor() ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ явно ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ объявлСн Π² ΠΎΠ±ΠΎΠΈΡ… классах, Horse ΠΈ Bird.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с мноТСствСнным наслСдованиСм

Π₯отя мноТСствСнноС наслСдованиС Π΄Π°Π΅Ρ‚ ряд прСимущСств ΠΏΠΎ сравнСниС с ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹ΠΌ, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ программисты с Π½Π΅ΠΎΡ…ΠΎΡ‚ΠΎΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π΅Π³ΠΎ. Основная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ компиляторы C++ всС Π΅Ρ‰Π΅ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ мноТСствСнноС наслСдованиС; это ослоТняСт ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‚Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ Ρ‡Ρ‚ΠΎ всС возмоТности, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΡ‹Π΅ этим ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈ Π±Π΅Π· Π½Π΅Π³ΠΎ.

Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Ссли Π²Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² своСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ мноТСствСнноС наслСдованиС, слСдуСт ΡƒΡ‡Π΅ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ с ΠΎΡ‚Π»Π°Π΄ΠΊΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈ Ρ‡Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½ΠΎΠ΅ услоТнСниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, связанноС с использованиСм этого ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°, Π½Π΅ всСгда оправдываСтся ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΌ эффСктом.


Π£ΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ наслСдования ΠΏΡ€ΠΈ объявлСнии класса

Π§Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Π΅ классы Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ исходный Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс ΠΊΠ°ΠΊ Π΅Π΄ΠΈΠ½Ρ‹ΠΉ источник, Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ наслСдования слСдуСт ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π²ΠΎ всСх ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… классах.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1:

classHorse : virtual public Animal class Bird : virtual public Animal '. class Pegasus: public Horse,public Bird

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 2:

class Schnauzer : virtual public 0og class Poodle ; virtual public 0og class Schnoodle : public Schnauzer, publiс Poodle


РСкомСндуСтся:Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ мноТСствСнноС наслСдованиС Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° Π² классС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π² Ρ€Π°Π·Π½Ρ‹Ρ… классах. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ наслСдованиС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ элСгантнСС ΠΎΠ±ΠΎΠΉΡ‚ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ источника наслСдования ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈΠ»ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ исходный Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс конструктором класса, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ классов.


НС рСкомСнддСтся:НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ мноТСствСнноС наслСдованиС Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹ΠΌ наслСдованиСм.

ΠšΠ»Π°ΡΡΡ‹-ΠΌΠ°Π½Π΄Π°Ρ‚Ρ‹

ΠŸΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹ΠΌ ΠΈ мноТСствСнным наслСдованиСм классов ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использованиС классов-ΠΌΠ°Π½Π΄Π°Ρ‚ΠΎΠ². Π’Π°ΠΊ, класс Horse ΠΌΠΎΠΆΠ½ΠΎ произвСсти ΠΎΡ‚ Π΄Π²ΡƒΡ… Π±Π°Π·ΠΎΠ²Ρ‹Ρ… классов β€” Animal ΠΈ Displayable, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ послСдний добавляСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ отобраТСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° экранС.