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

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

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

   return 0;

}

int * FuncOne()

{

   int * pInt = new int (5):

   cout << "the value of pint in FuncOne is: " << *pInt << endl:

   return pInt;

}

7. Π˜ΡΠΏΡ€Π°Π²ΡŒΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈΠ· упраТнСния 6.

#include <iostream.h>

int FuncOne();

int main()

{

   int theInt = FuncOne();

   cout << "the value of pint in main is: " << theInt << endl;

   return 0:

}

int FuncOne()

{

   int * pInt = new int (5);

   cout << "the value of pint in FuncOne is: " << <<pInt << endl;

   delete pint;

   return temp;

}

8. Π–ΡƒΡ‡ΠΊΠΈ: Ρ‡Ρ‚ΠΎ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π² этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅?

1: #include <iostream.h>

3: class CAT

4: {

5:    public:

6:       CAT(int age) { itsAge = age; }

7:       ~CAT(){ }

8:       int GetAge() const { return itsAge; }

9:    private:

10:      int itsAge:

11: };

12:

13: CAT & MakeCat(int age):

14: int main()

15: {

16:    int age = 7;

17:    CAT Boots = MakeCat(age);

18:    cout << "Boots is " << Boots.GetAge() << " years old\n";

19:    return 0:

20: }

22: CAT & MakeCat(int age)

23: {

24:    CAT * pCat = new CAT(age);

25:    return *pCat;

26: }

Ѐункция MakeCat Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ссылку Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса CAT, созданный Π² свободной памяти. Но ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ здСсь Π½Π΅ прСдусмотрСна опСрация ΠΏΠΎ освобоТдСнию этой памяти, созданиС Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π΅Π΅ ΡƒΡ‚Π΅Ρ‡ΠΊΠ΅.

9. Π˜ΡΠΏΡ€Π°Π²ΡŒΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈΠ· упраТнСния 8.

1: #include <iostream.h>

2:

3: class CAT

4: {

5:    public:

6:       CAT(int age) { itsAge = age; }

7:       ~CAT(){ }

8:       int GetAgeO const { return itsAge;}

9:    private:

10:      int itsAge;

11: };

13: CAT * MakeCat(int age);

14: int main()

15: {

16:    int age = 7;

17:    CAT * Boots = MakeCat(age);

18:    cout << "Boots is " << Boots.GetAge() << " years old\n";

19:    delete Boots;

20:    return 0;

21: }

23: CAT * MakeCat(int age)

24: {

25:    return new CAT(age);

26: }

Π”Π΅Π½ΡŒ 10

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ вопросы 

1. Π•сли Π²Ρ‹ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ-Ρ‡Π»Π΅Π½, ΠΊΠ°ΠΊ ΠΏΠΎΡ‚ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ?

ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ имя, Π½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΏΠΎ количСству ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏΡƒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

2. ΠšΠ°ΠΊΠ°Ρ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΈ объявлСниСм?

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π° объявлСниС β€” Π½Π΅Ρ‚. ОбъявлСния часто ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΈ опрСдСлСниями, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ объявлСний классов, ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ Π½ΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ typedef.

3. ΠšΠΎΠ³Π΄Π° вызываСтся конструктор-ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ?

ВсСгда, ΠΊΠΎΠ³Π΄Π° создаСтся врСмСнная копия ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π­Ρ‚ΠΎ случаСтся ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ пСрСдаСтся ΠΊΠ°ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

4. ΠšΠΎΠ³Π΄Π° вызываСтся дСструктор?

ДСструктор вызываСтся ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π»ΠΈΠ±ΠΎ ΠΏΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π²Ρ‹Ρ…ΠΎΠ΄Π° Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ области видимости, Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° delete для указатСля, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

5. Π§Π΅ΠΌ отличаСтся конструктор-ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° присваивания (=)?

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, Π° конструктор-ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ создаСт Π½ΠΎΠ²Ρ‹ΠΉ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

6. Π§Ρ‚ΠΎ прСдставляСт собой ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ this?

Π­Ρ‚ΠΎ скрытый ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° сам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

7. ΠšΠ°ΠΊ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΡƒ прСфиксных ΠΈ постфиксных ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² приращСния?

ΠŸΡ€Π΅Ρ„ΠΈΠΊΡΠ½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². ΠŸΠΎΡΡ‚Ρ„ΠΈΠΊΡΠ½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ° int, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² качСствС Ρ„Π»Π°Π³Π° для компилятора, ΡΠΎΠΎΠ±Ρ‰Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ это постфиксный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€.

8. ΠœΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ operator+ для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° short int?

НСт, для встроСнных Ρ‚ΠΈΠΏΠΎΠ² нСльзя ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ².

9. Π”опускаСтся Π»ΠΈ Π² C++ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° operator++ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ выполнял Π² классС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°?

ΠŸΡ€Π°Π²ΠΎΠΌΠΎΡ‡Π½ΠΎ, Π½ΠΎ этого Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ стоит. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ слСдуСт ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠΌ способом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ понятСн Π»ΡŽΠ±ΠΎΠΌΡƒ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŽ вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

10. ΠšΠ°ΠΊ устанавливаСтся Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° Π² ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΡΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² прСобразования Ρ‚ΠΈΠΏΠΎΠ²?

Никак. Подобно конструкторам ΠΈ дСструкторам, ΠΎΠ½ΠΈ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

 Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΡ

1. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ объявлСниС класса SimpleCircle (простая ΠΎΠΊΡ€ΡƒΠΆΠ½ΠΎΡΡ‚ΡŒ) с СдинствСнной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½ΠΎΠΉ-Ρ‡Π»Π΅Π½ΠΎΠΌ itsRadius (радиус). Π’ классС Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ конструктор ΠΈ дСструктор, Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ установки радиуса.

class SimpleCircle

{

   public:

      SimpleCircle();

      ~SimpleCircle();

      void SetRadius(int);

      int GetRadiusO;

   private:

      int itsRadius;

};

2. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ класс, созданный Π² ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠΈ !, с помошью конструктора, Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ itsRadius Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 5.

SimpleCircle::SimpleCircle():

itsRadius(5);

{ }

3. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² класс Π½ΠΎΠ²Ρ‹ΠΉ конструктор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ присваиваСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ своСго ΠΏΠ°Ρ€Π°-

ΠΌΠ΅Ρ‚Ρ€Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ itsRadius.

SimpleCircle::SimpleCircle(int radius):

itsRadius(radius)

{ }

4. ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΏΡ€Π΅ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π° ΠΈ постинкрСмСнта для использования Π² Π²Π°-

шСм классС SimpleCircle с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ itsRadius.

const SimpleCircle& SimpleCircle::operator++()

{

   ++(itsRadius);

   return *this;

}

// постфиксный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Operator ++(int).

// Π’Ρ‹Π±ΠΎΡ€ΠΊΠ°, Π·Π°Ρ‚Π΅ΠΌ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

const SimpleCircle SimpleCircle::operator++ (int)

// обьявляСм Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŒΠ΅ΠΊΡ‚ класса SimpleCircle ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ

* this

   SimpleCircle temp(*this);

   ++(itsRadius);

   return temp;

}

5. Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ SimpleCircle Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ itsRadius Π² динамичСской области памяти ΠΈ Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

class SimpleCircle

{

   public:

      SimpleCircle();

      SimpleCircle(int);

      ~SimpleCircle();

      void SetRadius(int);

      int GetRadius();

      const SimpleCircle& operator++();

      const SimpleCircle operator++(int);

   private:

      int *itsRadius;

};

SimpleCircle::SimpleCircle()

   {itsRadius = new int(5);}

SimpleCircle::SimpleCircle(int radius)

   {itsRadius = new int(radius);}

SimpleCircle::~SimpleCircle()

{

   delete itsRadius;

}

const SimpleCircle& SimpleCircle::operator++()

{

   ++(*itsRadius);

   return <<this;

}

// ΠŸΠΎΡΡ‚Ρ„ΠΈΠΊΡΠ½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Operator++(int).

// Π’Ρ‹Π±ΠΎΡ€ΠΊΠ°, Π·Π°Ρ‚Π΅ΠΌ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

const SimpleCircle SimpleCircle::operator++ (int)

{

   // объявляСм Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса SimpleCircle ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ

   *this

      SimpleCircle temp(<<this);

      ++(*itsRadius);

      return temp;

}

6. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π² классС SimpleCircle конструктор-ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ.

SimpleCircle::SimpleCircle(const SimpleCircle & rhs)

{

   int val = rhs.GetRadius();

   itsRadius = new int(val);

}

7. ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ Π² классС SimpleCircle ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания.

SimpleCircle& SimpleCircle::operator=(const SimpleCircle & rhs)

{

   if (this == &rhs)

      return *tnis;

   delete itsRadius;

   itsRadius = new int;

   *itsRadius = rhs.GetRadius();

   return *this;

}

8. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая создаСт Π΄Π²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса SimpleCircle. Для создания ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ конструктор, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ экзСмпляру ΠΏΡ€ΠΈ объявлСнии присвойтС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 9. Π‘ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π° ΠΈ Π²Ρ‹Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ значСния Π½Π° ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ. НаконСц, присвойтС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ ΠΈ Π²Ρ‹Π²Π΅Π΄ΠΈΡ‚Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½Π° ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ.

#include <iostream.h>

class SimpleCircle

{

   public:

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

      SimpleCircle();

      SimpleCircle(int);

      SimpleCircle(const SimpleCircle &);

      ~SimpleCircle() {}

      // ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ

      void SetRadius(int);

      int GetRadius() const;

      // ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹

      const SimpleCircle& operator++();

      const SimpleCircle operator++(int);

      SimpleCircle& operator=(const SimpleCircle &):

   private:

      int *itsRadius;

};

SimpleCircle::SimpleCircle()

{itsRadius = new int(5);}

SimpleCircle::SimpleCircle(int radius)

{itsRadius = new int(radius);}

SimpleCircle::SimpleCircle(const SimpleCircle & rh$)

{

   int val = rhs.GetRadius();

   itsRadius = new int(val);

}

SimpleCircle::~SimpleCircle()

{

   delete itsRadius;

}

SimpleCircleS SimpleCircle :operator=(const SimpleCircle & rhs)

{

   if (this == &rhs)

      return <<this;

   *itsRadius = rhs.GetRadius();

   return *this;

}

const SimpleCircle& SimpleCircle::operator++()

{

   ++(*itsRadius);

   return *this;

}

// ΠŸΠΎΡΡ‚Ρ„ΠΈΠΊΡΠ½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Operator ++(int).

// Π’Ρ‹Π±ΠΎΡ€ΠΊΠ°, Π·Π°Ρ‚Π΅ΠΌ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

const SimpleCircle SimpleCircle::operator++ (int)

{

   // объявляСм Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса SimpleCircle ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ

   *this

      SimpleCircle ternp(*this);

      ++(*itsRadius);

      return temp;

}

int SimpleCircle::GetRadius() const

{

   return ~itsRadius;

}

int main()

{

   SimpleCircle CircleOne, CircleTwo(9);

   CircleOne++;

   ++CircleTwo;

   cout << "CircleOne: " << CircleOne.GetRadius() << endl;

   cout << "CircleTwo: " << CircleTwo.GetRadius() << endl;

   CircleOne = CircleTwo;

   cout << "CircleOne: " << CircleOne.GetRadius() << endl:

   cout << "CircleTwo: " << CircleTwo.GetRadius() << endl;

   return 0;

}

9. Π–ΡƒΡ‡ΠΊΠΈ: Ρ‡Ρ‚ΠΎ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ использования ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° присваивания?