ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

Π˜Π΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ. 
ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

Π Π΅Ρ„Π΅Ρ€Π°Ρ‚ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС создаСтся синоним: Item2 ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ρ‡Ρ‚ΠΎ ΠΈ Item1. Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ доступ ΠΊ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ Item1 ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ Ρ‡Π΅Ρ€Π΅Π· этот Π½ΠΎΠ²Ρ‹ΠΉ синоним. К ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡŽ, ΠΏΡ€ΠΈ этом ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ΡƒΡ‚Π΅Ρ‡ΠΊΠ° памяти: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π»Π° ссылка Item2, Π½Π΅ ΠΈΠΌΠ΅Π½ΡƒΠ΅Ρ‚ся Π½ΠΈ ΠΏΡ€ΡΠΌΠΎ, Π½ΠΈ ΠΊΠΎΡΠ²Π΅Π½Π½ΠΎ ΠΈ Π΅Π³ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ потСряна. АргумСнты Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ const. Он ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

Π˜Π΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

Π˜Π΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ — это Ρ‚Π°ΠΊΠΎΠ΅ свойство ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΎΡ‚ Π²ΡΠ΅Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠΎΠΌ ошибок Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ являСтся Π½Π΅ΡƒΠΌΠ΅Π½ΠΈΠ΅ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒ имя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΎΡ‚ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€.

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Ρ‚ΠΎΡ‡ΠΊΡƒ Π½Π° ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ.

struct Point {.

int Ρ…; // пСрвая ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°.

int Ρƒ; // вторая ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°.

Point (void); // конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (0,0).

Point (int xValue, int yValue); // конструктор

};

Наша абстракция Point — это ΠΏΠ°Ρ€Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ (Ρ…, Ρƒ). ΠŸΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΎ Π΄Π²Π° конструктора: ΠΎΠ΄ΠΈΠ½ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚ΠΎΡ‡ΠΊΡƒ Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌΠΈ значСниями ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ — Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ значСниями.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Ρ‚ΠΎΡ‡ΠΊΡƒ, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡƒΡŽ Π½Π° ΡΠΊΡ€Π°Π½Π΅ дисплСя (DisplayPoint). ΠžΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠΌΡΡ возмоТностями Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΡƒ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π΅Π΅ ΠΏΠΎ ΡΠΊΡ€Π°Π½Ρƒ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ Π΅Π΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠœΡ‹ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Π΅ΠΌ Π½Π°ΡˆΡƒ Π°Π±ΡΡ‚Ρ€Π°ΠΊΡ†ΠΈΡŽ Π² Π²ΠΈΠ΄Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ объявлСния Π½Π° C++:

class DisplayPoint {.

public:

DisplayPoint (); // конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (0,0).

DisplayPoint (const Point& location); // конструктор

~DisplayPoint (); // дСструктор

void draw (); // рисуСт Ρ‚ΠΎΡ‡ΠΊΡƒ Π½Π° ΡΠΊΡ€Π°Π½Π΅.

void move (const Point& location); // ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΎΡ‡ΠΊΡƒ.

Point location (); // Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹.

.. .

};

АргумСнты Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ const. Он ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎ ΡΡΡ‹Π»ΠΊΠ΅ ΠΈΠ»ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ, Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ся. Π›ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹, константы ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠ΅ прСобразования Ρ‚ΠΈΠΏΠ°, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ const&-Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈ Π½Π΅Π»ΡŒΠ·Ρ — Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π½Π΅ const &-Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

Объявим экзСмпляры класса DisplayPoint:

DisplayPoint Item1;

DisplayPoint * Item2 = new DisplayPoint (Point (75,75));

DisplayPoint * Item3 = new DisplayPoint (Point (100,100));

DisplayPoint * Item4 = 0;

ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ этих ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΈ Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (рис. 3.1 Π°). Π’ ΠΏΠ°ΠΌΡΡ‚ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚Π²Π΅Π΄Π΅Π½Ρ‹ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ мСста ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π° Item1, Item2, Item3, Item4. ΠŸΡ€ΠΈ этом Item1 Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса DisplayPoint, Π° Ρ‚Ρ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… — указатСлями. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, лишь Item2 ΠΈ Item3 Π±ΡƒΠ΄ΡƒΡ‚ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса. Π£ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Item2 ΠΈ Item3, ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ Π½Π΅Ρ‚ ΠΈΠΌΠ΅Π½, хотя Π½Π° Π½ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ «Ρ€Π°Π·Ρ‹ΠΌΠ΅Π½ΠΎΠ²Ρ‹Π²Π°Ρ» ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, *Item2). ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Item2 ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса, Π½Π° ΠΈΠΌΡ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ косвСнно ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Ρ‡Π΅Ρ€Π΅Π· *Item2.

Уникальная ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° сохраняСтся Π½Π° Π²ΡΠ΅ врСмя Π΅Π³ΠΎ сущСствования, Π΄Π°ΠΆΠ΅ Ссли Π΅Π³ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ состояниС измСнилось. ΠŸΡ€ΠΈ этом имя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ сохраняСтся.

Рассмотрим Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² (рис. 3.1, Π±):

Item1.move (Item2 -> location ());

Item4 = Item3;

Item4 -> move (Point (38, 100));

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Item1 ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Item2, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ относятся ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ Ρ‚ΠΎΡ‡ΠΊΠ΅ экрана. Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Item4 стал ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ρ‡Ρ‚ΠΎ ΠΈ Item3. Π₯отя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Item1 ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Item2, ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ состояниС, ΠΎΠ½ΠΈ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΡ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ состояниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° *Item3, использовав Π΅Π³ΠΎ Π½ΠΎΠ²ΠΎΠ΅ косвСнноС имя Item4.

Π˜Π΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

Рис. 3.1 Π˜Π΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Π‘ΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ имСнуСтся Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΠΎΠ΄Π½ΠΈΠΌ способом нСсколькими синонимичными ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ структурной Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒΡŽ.

Бтруктурная Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Π’Ρ€ΡƒΠ΄Π½ΠΎΡΡ‚ΡŒ распознания ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктов ΠΏΡ€ΠΈ дСйствиях с ΡΠΈΠ½ΠΎΠ½ΠΈΠΌΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ часто ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡƒΡ‚Π΅Ρ‡ΠΊΠ°ΠΌ памяти, Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌΡƒ доступу ΠΊ ΠΏΠ°ΠΌΡΡ‚ΠΈ ΠΈ, Ρ…ΡƒΠΆΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π΅ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΌΡƒ измСнСнию состояния. НапримСр, Ссли ΠΌΡ‹ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‡Π΅Ρ€Π΅Π· ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Item3, Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ указатСля Item4 окаТСтся бСссмыслСнным: эта ситуация называСтся висячСй ссылкой. Рассмотрим Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… дСйствий (рис. 3.1, Π²):

Item2 = &Item1;

Item4 -> move (Item2 -> location ());

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС создаСтся синоним: Item2 ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ρ‡Ρ‚ΠΎ ΠΈ Item1. Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ доступ ΠΊ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ Item1 ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ Ρ‡Π΅Ρ€Π΅Π· этот Π½ΠΎΠ²Ρ‹ΠΉ синоним. К ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡŽ, ΠΏΡ€ΠΈ этом ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ΡƒΡ‚Π΅Ρ‡ΠΊΠ° памяти: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π»Π° ссылка Item2, Π½Π΅ ΠΈΠΌΠ΅Π½ΡƒΠ΅Ρ‚ся Π½ΠΈ ΠΏΡ€ΡΠΌΠΎ, Π½ΠΈ ΠΊΠΎΡΠ²Π΅Π½Π½ΠΎ ΠΈ Π΅Π³ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ потСряна.

Π’ ΡΠ·Ρ‹ΠΊΠ°Ρ… Ρ‚ΠΈΠΏΠ° C++ такая ΠΏΠ°ΠΌΡΡ‚ΡŒ освобоТдаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, создавшая ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π’Π°ΠΊΠΈΠ΅ ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ памяти ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΈ ΠΏΡ€ΠΎΡΡ‚ΠΎ нСудобство, ΠΈ ΠΊΡ€ΡƒΠΏΠ½Ρ‹Π΅ сбои, особСнно Ссли ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сСбС ΡƒΡ‚Π΅Ρ‡ΠΊΡƒ памяти Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ управлСния спутником. ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° Π½Π° ΡΠΏΡƒΡ‚Π½ΠΈΠΊΠ΅ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π°Ρ… ΠΊΠΈΠ»ΠΎΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΎΡ‚ Π—Π΅ΠΌΠ»ΠΈ ΠΎΡ‡Π΅Π½ΡŒ Π½Π΅ΡƒΠ΄ΠΎΠ±Π΅Π½.

Для создания Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎ Ρ‚ΠΎ ΠΆΠ΅ ΡΠΎΡΡ‚ояниС, Ρ‡Ρ‚ΠΎ ΠΈ Ρƒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ конструктор копирования, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ описаниС:

DisplayPoint (const DisplayPoint &); // конструктор копирования ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ этого ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ конструктора Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ конструктор, Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ поэлСмСнтно. Π­Ρ‚ΠΎ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π°. Когда ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ содСрТит ссылки ΠΈΠ»ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, такая опСрация ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡΠΎΠ·Π΄Π°Π½ΠΈΡŽ синонимов ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° ΡΡ‚ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€. ΠœΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌ описаниС класса DisplayPoint Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π΅Π³ΠΎ экзСмпляр содСрТал ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ‚ΠΎΡ‡ΠΊΡƒ:

class DisplayPoint {.

.. .

Point * DPoint.

.. .

};

.. .

DisplayPoint Item1;

.. .

DisplayPoint Item2(Item1);

ΠŸΠΎΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Item1 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° Π°Π³Ρ€Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚ΠΈΠΏΠ° Point Ρƒ ΠΎΠ±ΠΎΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Item1 ΠΈ Item2 Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, содСрТащий мСстополоТСниС ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ (рис. 3.2). ЀактичСски, ΠΎΠ±Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π±ΡƒΠ΄ΡƒΡ‚ отвСтствСнны Π·Π° ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ Ρ‚ΠΎΡ‡ΠΊΠΈ. Π­Ρ‚ΠΎΠ³ΠΎ Π»ΠΈ ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ?

ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ — это Ρ‚ΠΎΠΆΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π² C++ Π΅Π³ΠΎ смысл ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ. НапримСр, ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса DisplayPoint ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ строку:

DisplayPoint operator= (const DisplayPoint &);

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ.

ΠŸΠΎΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

Рис. 3.2 ΠŸΠΎΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

DisplayPoint Item5;

Item5 = Item1;

Как ΠΈ Π² ΡΠ»ΡƒΡ‡Π°Π΅ ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ конструктора, Ссли ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ явно, Ρ‚ΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ копируСтся поэлСмСнтно.

ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ тСсно связано с Ρ€Π°Π²Π΅Π½ΡΡ‚Π²ΠΎΠΌ. РавСнство ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ двумя способами. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π΄Π²Π° ΠΈΠΌΠ΅Π½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ равСнство состояний Ρƒ Π΄Π²ΡƒΡ… Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½Π° Ρ€ΠΈΡ. 3.1, Π², для Item1 ΠΈ Item2 справСдлив ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ тоТдСствСнности. А Π΄Π»Ρ Item2 ΠΈ Item3 истинным Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚.

Π’ Π‘++ Π½Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° равСнства, поэтому ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ равСнство ΠΈ Π½Π΅Ρ€Π°Π²Π΅Π½ΡΡ‚Π²ΠΎ, объявив эти ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΏΡ€ΠΈ описании:

int operator == (Point&);

int operator ≠ (Point&);

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ