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

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

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

ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌΠΈ ΠΈΠ»ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌΠΈ. НСзависимо ΠΎΡ‚ размСрности, всС массивы Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, int) ΠΈΠ»ΠΈ массивы ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² классов с конструкторами, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΏΡ€ΠΈ объявлСнии.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ массивов ΠΈΠ»ΠΈ всС массивы Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ ΠΊΠ°ΠΊ Π² стСковой области памяти, Ρ‚Π°ΠΊ ΠΈ Π² области динамичСского ΠΎΠ±ΠΌΠ΅Π½Π°. Если удаляСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ· области динамичСской памяти, Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки послС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова delete[].

ИмСна массивов ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой константныС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт массива. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ элСмСнтам, ΠΈΠΌΠ΅Π½Π° массивов ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² матСматичСских опСрациях, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ указатСлями.

Если Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π΅ извСстСн Π²ΠΎ врСмя компиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‚ΠΎ для поддСрТания Ρ‚Π°ΠΊΠΈΡ… ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ связанныС списки. Взяв связанный список Π·Π° основу, ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²ΠΈΠ΄ΠΎΠ² массивов ΠΈ структур, автоматичСски Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ… слоТныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой массивы символов. Π’ C++ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ срСдства манипулирования тСкстовыми строками, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Π²ΠΎΠ΄Π° Π² массив строки, взятой Π² Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ.

Вопросы ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹

Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, Ссли Π² массив ΠΈΠ· 24-Ρ… Ρ‡Π»Π΅Π½ΠΎΠ² Π²ΠΏΠΈΡΠ°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для 25-Π³ΠΎ элСмСнта?

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π² ячСйку памяти, Π½Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΡƒΡŽ массиву, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π§Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой элСмСнты Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ массива?

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

МоТно Π»ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ массивов?

Π”Π°. Массив ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ, Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€ΡƒΠΏΠ½Ρ‹ΠΉ массив. Π’ случаС Ρ€Π°Π±ΠΎΡ‚Ρ‹ со строками ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ стандартныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ strcat, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ массивов символов.

Π§Π΅ΠΌ связанныС списки Π»ΡƒΡ‡ΡˆΠ΅ массивов?

ΠœΠ°ΡΡΠΈΠ²Ρ‹ всСгда ΠΈΠΌΠ΅ΡŽΡ‚ фиксированный Ρ€Π°Π·ΠΌΠ΅Ρ€, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ€ связанного списка ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ динамичСски Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ВсСгда Π»ΠΈ Π½ΡƒΠΆΠ½ΠΎ Π² классС строк ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ char * для сохранСния содСрТимого строки?

НСт. МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти, которая большС ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡.

ΠšΠΎΠ»Π»ΠΎΠΊΠ²ΠΈΡƒΠΌ

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

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

1. ΠšΠ°ΠΊ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ ΠΈ послСднСму элСмСнтам массива SomeArray[25]?

2. ΠšΠ°ΠΊ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив?

3. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ элСмСнтов ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива, созданного ΠΏΡ€ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π΅ Π½Π° вопрос 2.

4. Π‘колько элСмСнтов содСрТит массив SomeArray[10][5][20]?

5. ΠšΠ°ΠΊΠΎΠ²ΠΎ максимальноС число элСмСнтов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² связанный список?

6. ΠœΠΎΠΆΠ½ΠΎ Π»ΠΈ Π² связанном спискС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ индСксы?

7. ΠšΠ°ΠΊΠΈΠΌ являСтся послСдний символ Π² строкС "Π‘Π΅Ρ€Π³Π΅ΠΉ β€” Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΏΠ°Ρ€Π΅Π½ΡŒ"?

УпраТнСния

1. ΠžΠ±ΡŠΡΠ²ΠΈΡ‚Π΅ Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдставляСт ΠΏΠΎΠ»Π΅ для ΠΈΠ³Ρ€Ρ‹ Π² крСстики ΠΈ Π½ΠΎΠ»ΠΈΠΊΠΈ.

2. Π—Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 0 всС элСмСнты созданного ΠΏΠ΅Ρ€Π΅Π΄ этим массива.

3. ΠžΠ±ΡŠΡΠ²ΠΈΡ‚Π΅ класс ΡƒΠ·Π»Π° Node, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ Ρ†Π΅Π»Ρ‹Π΅ числа.

4. Π–ΡƒΡ‡ΠΊΠΈ: Ρ‡Ρ‚ΠΎ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅?

   unsigned short SomeArray[5][4];

   for (int i = 0; i<4; i++)

      for (int j = 0; j<5; ]++)

         SomeArray[i][j] = i+j;

5. Π–ΡƒΡ‡ΠΊΠΈ: Ρ‡Ρ‚ΠΎ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅?

   unsigned short SomeArray[5][4];

   for (int i = 0; i<=5; i++)

      for (int j = 0; j<=4; j++)

         SomeArray[i][j] = 0;

Π”Π΅Π½ΡŒ 13-ΠΉ. ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ

На ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ занятии Π²Ρ‹ ΡƒΠ·Π½Π°Π»ΠΈ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… классах. На этом занятии Ρ€Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ ΠΎΠ± основном ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΌ ядрС ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ° β€” возмоТности Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΡΠ²ΡΠ·Ρ‹Π²Π°Ρ‚ΡŒ спСцифичСскиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… классов с указатСлями Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса. БСгодня Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅:

β€’ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ мноТСствСнноС наслСдованиС ΠΈ ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ

β€’ Π§Ρ‚ΠΎ прСдставляСт собой Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ наслСдованиС

β€’ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ абстрактныС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…

β€’ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ чистыС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹ΠΌ наслСдованиСм

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π°Π΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ ΠΎ ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Ρ… ΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΉ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π΄Π²Π° класса, ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… ΠΎΡ‚ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ ΠΎΠ±Ρ‰Π΅Π³ΠΎ класса. Один β€” Bird, посвящСнный ΠΏΡ‚ΠΈΡ†Π°ΠΌ, Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ β€” Mammals, посвящСнный ΠΌΠ»Π΅ΠΊΠΎΠΏΠΈΡ‚Π°ΡŽΡ‰ΠΈΠΌ. Класс Bird содСрТит Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ-Ρ‡Π»Π΅Π½ Fly(), Π·Π°Π΄Π°ΡŽΡ‰ΡƒΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ»Π΅Ρ‚Π°. Класс Mammals Ρ€Π°Π·Π±ΠΈΡ‚ Π½Π° ряд подклассов, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ класс лошадСй β€” Horse. Класс содСрТит Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ- Ρ‡Π»Π΅Π½Π° β€” Whinny() ΠΈ Gallop(), ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‰ΠΈΡ… Ρ€ΠΆΠ°Π½ΠΈΠ΅ ΠΈ Π±Π΅Π³ Π³Π°Π»ΠΎΠΏΠΎΠΌ соотвСтствСнно.

Но Π²Π½Π΅Π·Π°ΠΏΠ½ΠΎ Ρƒ вас Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ вСсьма интСрСсный мифичСский ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ β€” ΠΊΡ€Ρ‹Π»Π°Ρ‚ΠΎΠ³ΠΎ ПСгаса (Pegasus), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» Π±Ρ‹ Ρ‡Π΅ΠΌ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ Π³ΠΈΠ±Ρ€ΠΈΠ΄Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Horse ΠΈ Bird. Π‘Ρ€Π°Π·Ρƒ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅Π΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠ΅ наслСдованиС, Π²Π°ΠΌ слоТно Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ с этой Π·Π°Π΄Π°Ρ‡Π΅ΠΉ.

Если ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Pegasus ΠΊΠ°ΠΊ Ρ‡Π»Π΅Π½ класса Bird, Ρ‚ΠΎ для Π½Π΅Π³ΠΎ станут нСдоступными Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Whinny() ΠΈ Gallop(). Если Pegasus ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Horse, Ρ‚ΠΎ Π΅ΠΌΡƒ станСт нСдоступной функция Fly().

ΠŸΠ΅Ρ€Π²ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ Fly() Π² класс Horse, послС Ρ‡Π΅Π³ΠΎ Π² этом классС ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Pegasus. ΠŸΡ€ΠΈ этом ΠΎΠ±Π° класса (Bird ΠΈ Horse) Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ Fly(), ΠΈ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² ΠΎΠ΄Π½ΠΎΠΌ классС Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ Π·Π°Π±Ρ‹Ρ‚ΡŒ внСсти ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ измСнСния Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ классС. Π₯ΠΎΡ€ΠΎΡˆΠΎ, Ссли Ρ‚Π°ΠΊΠΈΡ… классов Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π°. Если Π²Π°ΠΌ придСтся Π²Π½ΠΎΡΠΈΡ‚ΡŒ измСнСния Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Ρ‡Π΅Ρ€Π΅Π· Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя послС Π΅Π΅ создания, Π±ΡƒΠ΄Π΅Ρ‚ слоТно Π²ΡΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Π² ΠΊΠ°ΠΊΠΈΡ… Π΅Ρ‰Π΅ классах прСдставлСн этот ΠΌΠ΅Ρ‚ΠΎΠ΄.

Когда Π²Ρ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ списки ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² классов Bird ΠΈ Horse, ΠΏΠ΅Ρ€Π΅Π΄ Π²Π°ΠΌΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. Π₯ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Pegasus Π±Ρ‹Π» прСдставлСн Π² ΠΎΠ±ΠΎΠΈΡ… списках, Π½ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС это Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ возникшСй ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ². HaΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ слишком "Π»ΠΎΡˆΠ°Π΄ΠΈΠ½Ρ‹ΠΉ" ΠΌΠ΅Ρ‚ΠΎΠ΄ Gallop() Π² Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‚Π΅ΠΊΠ°Π΅ΠΌΡ‹ΠΉ Move(), послС Ρ‡Π΅Π³ΠΎ Π·Π°ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ Pegasus Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ выполнял Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Fly(). Π’ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… класса Horse ΠΌΠ΅Ρ‚ΠΎΠ΄ Move() Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Ρ€Π°Π½ΡŒΡˆΠ΅ выполнялся ΠΌΠ΅Ρ‚ΠΎΠ΄ Gallop(). Для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Pegasus ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°ΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ дистанции ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€Π΅ΠΎΠ΄ΠΎΠ»Π΅Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Gallop(), Π° Π΄Π»ΠΈΠ½Π½Ρ‹Π΅ β€” ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Fly():

Pegasus::Move(long distance)

{

   if (distance > veryFar)

      fly(distance);

   else

      gallop(distance);

}

Но ΠΈ этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈΠΌΠ΅Π΅Ρ‚ ряд ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΡƒΠΆΠ΅ Π½Π΅ смоТСт Π»Π΅Ρ‚Π°Ρ‚ΡŒ Π½Π° ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ дистанции ΠΈ Π±Π΅Π³Π°Ρ‚ΡŒ Π½Π° Π΄Π»ΠΈΠ½Π½Ρ‹Π΅. ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, всС ΠΆΠ΅ просто пСрСнСсти ΠΌΠ΅Ρ‚ΠΎΠ΄ Fly() Π² класс Horse, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² листингС 13.1? ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ лошади, Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ своСм, Π»Π΅Ρ‚Π°Ρ‚ΡŒ Π½Π΅ ΡƒΠΌΠ΅ΡŽΡ‚, поэтому Π²ΠΎ всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… этого класса, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Pegasus, Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½ΠΈΡ‡Π΅Π³ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ.

Листинг 13.1. Π£ΠΌΠ΅ΡŽΡ‚ Π»ΠΈ лошади Π»Π΅Ρ‚Π°Ρ‚ΡŒ...  

1: // Листинг 13.1. Π£ΠΌΠ΅ΡŽΡ‚ Π»ΠΈ лошади Π»Π΅Ρ‚Π°Ρ‚ΡŒ...

2: // Π€ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Fly() Π² классС Horse

3:

4: #include <iostream.h>

5:

6: class Horse

7: {

8:    public:

9:       void Gallop(){ cout << "Galloping...\n"; }

10:      virtual void Fly() { cout << "Horses can't fly.\n"; }

11:   private:

12:      int itsAge;

13: };

14:

15: class Pegasus : public Horse

16: {

17:    public:

18:       virtual void Fly() { cout << "I can fly! I can fly! I can fly!\n"; }

19: };

20:

21: const int NumberHorses = 5;

22: int main()

23: {

24:    Horse* Ranch[NumberHorses];

25:    Horse* pHorse;

26:    int choice,i;

27:    for (i=0; i<NumberHorses; i++)

28:    {

29:       cout << "(1)Horse (2)Pegasus: ";

30:       cin >> choice;

31:       if (choice == 2)

32:          pHorse = new Pegasus;

33:       else

34:          pHorse = new Horse;

35:       Ranch[i] = pHorse;

36:    }

37:    cout << "\n";

38:    for (i=0; i<NumberHorses; i++)

39:    {

40:       Ranch[i]->Fly();

41:       delete Ranch[i];

42:    }

43:    return 0;

44: }


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

(1)Horse (2)Pegasus; 1

(1)Horse (2)Pegasus: 2

(1)Horse (2)Pegasus: 1

(1)Horse (2)Pegasus: 2

(1)Horse (2)Pegasus: 1

Horses can't fly.

I can fly! I can fly! I can fly!

Horses can't fly.

I can fly! I can fly! I can fly!

Horses can't fly.


Анализ: БСзусловно, эта ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ†Π΅Π½ΠΎΠΉ добавлСния Π² класс Horse Ρ€Π΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Fly(). Π­Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ Π² строкС 10. Для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса этот ΠΌΠ΅Ρ‚ΠΎΠ΄ констатируСт Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ лошади Π»Π΅Ρ‚Π°Ρ‚ΡŒ Π½Π΅ ΡƒΠΌΠ΅ΡŽΡ‚. И Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Pegasus ΠΌΠ΅Ρ‚ΠΎΠ΄ замСщаСтся Π² строкС 18 Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ заявляСт, Ρ‡Ρ‚ΠΎ ΡƒΠΌΠ΅Π΅Ρ‚ Π»Π΅Ρ‚Π°Ρ‚ΡŒ.