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

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

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

35:    }

36:    return 0;

37: }


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

Cat #1: 1 

Cat #2: 3 

Cat #3: 5

... 

Cat #499: 997

Cat #500: 999


Анализ: ОбъявлСниС класса CAT Π² строках 5β€”17 ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎ объявлСнию этого клас- β€’ ca Π² листингС 12.4. Но, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ листинга, Π² строкС 21

ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ массив Family, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ 500 ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса CAT.

Π’ Ρ†ΠΈΠΊΠ»Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ (строки 24-29) Π² области динамичСской памяти создаСтся 500 Π½ΠΎΠ²Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса CAT, ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… присваиваСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ itsAge, Ρ€Π°Π²Π½ΠΎΠ΅ ΡƒΠ΄Π²ΠΎΠ΅Π½Π½ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ индСкса плюс ΠΎΠ΄ΠΈΠ½. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ класса CAT присваиваСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1, Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ β€” 3, Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌΡƒ β€” 5 ΠΈ Ρ‚.Π΄. Π’ этом ΠΆΠ΅ Ρ†ΠΈΠΊΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ элСмСнту массива присваиваСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° вновь созданный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚ΠΈΠΏ массива Π±Ρ‹Π» объявлСн ΠΊΠ°ΠΊ CAT*, Π² Π½Π΅ΠΌ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ, Π° Π½Π΅ ΠΈΡ… Ρ€Π°Π·Ρ‹ΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ значСния.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ†ΠΈΠΊΠ» (строки 31β€”35) Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π½Π° экран всС значСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ΡΡ ссылки Π² массивС. ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ выполняСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ индСкса: Family[i]. ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ элСмСнт массива установлСн, слСдуСт Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° GetAge().

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ всС элСмСнты массива ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² стСковой памяти. Но Π² этот Ρ€Π°Π· элСмСнтами ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ сами ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ хранятся Π² области динамичСского ΠΎΠ±ΠΌΠ΅Π½Π°.

ОбъявлСниС массивов Π² области динамичСского ΠΎΠ±ΠΌΠ΅Π½Π°

БущСствуСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ вСсь массив Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ динамичСского ΠΎΠ±ΠΌΠ΅Π½Π°. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово new ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ индСксирования, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, Π³Π΄Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ этой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ являСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° массив, сохранСнный Π² области динамичСского ΠΎΠ±ΠΌΠ΅Π½Π°:

CAT *Family = new CAT[500];

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Family Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ адрСс Π² динамичСской области ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта массива ΠΈΠ· пятисот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса CAT. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Π² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ прСдставлСн адрСс ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Family[0].

Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ прСимущСство ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ объявлСния массива состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Family Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ матСматичСскиС дСйствия ΠΊΠ°ΠΊ с Π»ΡŽΠ±Ρ‹ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ возмоТности Π² ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ доступом ΠΊ элСмСнтам массива. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ дСйствия:

CAT *Family = new CAT[500];

CAT *pCat = Family; // pCat ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Family[0]

pCat->SetAge(10); // присваиваСт Family[0] Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 10

pCat++; // ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ Family[1]

pCat->SetAge(20); // присваиваСт Family[1] Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 20

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ Π½ΠΎΠ²Ρ‹ΠΉ массив ΠΈΠ· 500 ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса CAT ΠΈ возвращаСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт этого массива. Π—Π°Ρ‚Π΅ΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ это ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ SetAge(), ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΉ Π² классС CAT, ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ массива присваиваСтся

Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 10. ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ массива осущСствляСтся Π·Π° счСт приращСния адрСса Π² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ Π½Π° массив, послС Ρ‡Π΅Π³ΠΎ Ρ‚Π΅ΠΌ ΠΆΠ΅ способом присваиваСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 20 Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ массива.

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° массив ΠΈΠ»ΠΈ массив ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ

Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Ρ€ΠΈ объявлСния:

1: Cat Family0ne[500];

2: CAT >> FamilyTwo[500];

3: CAT * FamilyThree = new CAT[500];

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ массив FamilyOne, содСрТащий 500 ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ‚ΠΈΠΏΠ° CAT. Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ случаС β€” массив FamilyTwo, содСрТащий 500 ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса CAT, ΠΈ Π² Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌ случаС β€” ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ FamilyThree, ΡΡΡ‹Π»Π°ΡŽΡ‰ΠΈΠΉΡΡ Π½Π° массив ΠΈΠ· 500 ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса CAT.

Π’ зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΎΠ΅ объявлСниС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ способы управлСния массивом. Как Π½ΠΈ странно, Π½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ FamilyThree ΠΏΠΎ сути своСй Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±Π»ΠΈΠΆΠ΅ ΠΊ массиву FamilyOne, Π½ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ отличаСтся ΠΎΡ‚ массива ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ FamilyTwo.

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² этом, слСдуСт Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ содСрТат Π² сСбС всС эти ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° массив FamilyThree содСрТит адрСс ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта массива, Π½ΠΎ вСдь это ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ содСрТит имя массива FamilyOne.

ИмСна массивов ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ

Π’ C++ имя массива прСдставляСт собой константный ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт массива. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Π² объявлСнии

CAT Family[50];

создаСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Family Π½Π° адрСс ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта массива &Family[0].

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ допускаСтся использованиС ΠΈΠΌΠ΅Π½ массивов ΠΊΠ°ΠΊ константных ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ Family + 4 соотвСтствуСт ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ пятому элСмСнту массива Family[4].

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ выполняСт с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ массивов Ρ‚Π΅ ΠΆΠ΅ матСматичСскиС дСйствия слоТСния, ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π° ΠΈ Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°, Ρ‡Ρ‚ΠΎ ΠΈ с указатСлями. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ опСрация Family + 4 Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ Π½Π΅ ΠΏΡ€ΠΈΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… Π±Π°ΠΉΡ‚ΠΎΠ² ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ адрСсу, Π° сдвиг Π½Π° Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Если Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ€Π°Π²Π΅Π½ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ΠΌ Π±Π°ΠΉΡ‚Π°ΠΌ, Ρ‚ΠΎ ΠΊ адрСсу Π² ΠΈΠΌΠ΅Π½ΠΈ массива Π±ΡƒΠ΄ΡƒΡ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π½Π΅ 4, Π° 16 Π±Π°ΠΉΡ‚. Если Π² нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса CAT содСрТит Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅-Ρ‡Π»Π΅Π½Π° Ρ‚ΠΈΠΏΠ° long ΠΏΠΎ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π±Π°ΠΉΡ‚Π° каТдая ΠΈ Π΄Π²Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅-Ρ‡Π»Π΅Π½Π° Ρ‚ΠΈΠΏΠ° short ΠΏΠΎ Π΄Π²Π° Π±Π°ΠΉΡ‚Π° каТдая, Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠ΄Π½ΠΎΠ³ΠΎ элСмСнта массива Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π΅Π½ 20 Π±Π°ΠΉΡ‚ ΠΈ опСрация Family + 4 сдвинСт адрСс Π² ΠΈΠΌΠ΅Π½ΠΈ указатСля Π½Π° 80 Π±Π°ΠΉΡ‚.

ОбъявлСниС массива Π² динамичСской области памяти ΠΈ Π΅Π³ΠΎ использованиС ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² листингС 12.7.

Листинг 12.7. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ массива с использованиСм ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова new

1: // Листинг 12.7. Массив Π² динамичСской области памяти

2:

3: #include <iostream.h>

4:

5: class CAT

6: {

7:    public:

8:       CAT() { itsAge = 1; itsWeight=5; }

9:       ~CAT();

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

11:      int GetWeight() const { return itsWeight; }

12:      void SetAge(int age) { itsAge = age; }

13:

14:   private:

15:      int itsAgo;

16:      int itsWeight;

17: };

18:

19: CAT::~CAT()

20: {

21:    // cout << "Destructor called!\n";

22: }

23:

24: int main()

25: {

26:    CAT * Family = new CAT[500];

27:    int i;

28:

29:    for (i = 0; i < 500; i++)

30:    {

31:       Family[i].SetAge(2*i +1);

32:    }

33:

34:    for (i = 0; i < 500; i++)

35:    {

36:       cout << "Cat #" << i+1 << ": ";

37:       cout << Family[i].GetAge() << endl;

38:    }

39:

40:    delete [] Family;

41:

42:    return 0;

43: }


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

Cat #1: 1

Cat #2: 3

Cat #3: 5

...

Cat #499: 997

Cat #500: 999


Анализ: Π’ строкС 26 ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ массив Family для пятисот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса CAT. Благодаря использованию выраТСния new CAT[500] вСсь массив сохраняСтся Π² области динамичСской памяти.

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ массива ΠΈΠ· ΠΎΠ±Π»Π°ΡΡ‚ΠΈ динамичСской памяти

ΠšΡƒΠ΄Π° Π΄Π΅Π²Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ массива всС эти ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса CAT, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅? НС происходит Π»ΠΈ здСсь ΡƒΡ‚Π΅Ρ‡ΠΊΠ° памяти? Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ массива Family с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° delete[ ] (Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки) освобоТдаСт всС ячСйки памяти, ΠΎΡ‚Π²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ для Π½Π΅Π³ΠΎ. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ достаточно ΡΠΎΠΎΠ±Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΈΠ· памяти всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ удаляСмого массива ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ для Π½ΠΎΠ²ΠΎΠ³ΠΎ использования.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² этом, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ с 500 Π½Π° 10 Π² строках 26, 29 ΠΈ 34. Π—Π°Ρ‚Π΅ΠΌ Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠΉΡ‚Π΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² строкС 21 с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ cout ΠΈ запуститС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. Когда Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° строка 43, послСдуСт Π΄Π΅ΡΡΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² дСструктора для удалСния ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса CAT Π² массивС Family.

Боздавая ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² области динамичСской памяти с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова new, всСгда удаляйтС Π΅Π³ΠΎ ΠΈΠ· памяти с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° delete, Ссли этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ большС Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π’ случаС создания массива Π² области динамичСского ΠΎΠ±ΠΌΠ΅Π½Π° Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ new <class>[size] ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ· памяти Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ delete[]. ΠšΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ удаляСтся вСсь массив.

Если Π²Ρ‹ Π·Π°Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки, Ρ‚ΠΎ ΠΈΠ· памяти Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ массива. Π’ этом ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ссли Π² нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки Π² строкС 38. Если ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΈ внСсСны измСнСния Π² строку 21, ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π»ΠΎΡΡŒ Π²Ρ‹ΡˆΠ΅, Ρ‚ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° экранС отобразится Π²Ρ‹Π·ΠΎΠ² Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ дСструктора ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠ΄Π°Π»ΠΈΡ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ массива. ΠŸΠΎΠ·Π΄Ρ€Π°Π²Π»ΡΠ΅ΠΌ вас! Π’Ρ‹ потСряли ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΉ Π±Π»ΠΎΠΊ памяти для дальнСйшСго использования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ.


РСкомСндуСтся:ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ для обращСния ΠΊ массиву ΠΈΠ· n элСмСнтов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ индСксы ΠΎΡ‚ 0 Π΄ΠΎ n-1. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ свойства матСматичСских ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с указатСлями для управлСния доступом ΠΊ элСмСнтам массива.


НС рСкомСндуСтся:НС записывайтС Π΄Π°Π½Π½Ρ‹Π΅ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ массива. НС ΠΏΡƒΡ‚Π°ΠΉΡ‚Π΅ массив ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ с ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° массив.

ΠœΠ°ΡΡΠΈΠ²Ρ‹ символов

Π‘Ρ‚Ρ€ΠΎΠΊΠ° тСкста прСдставляСт собой Π½Π°Π±ΠΎΡ€ символов. ВсС строки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎ сих ΠΏΠΎΡ€ использовались Π½Π°ΠΌΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…, прСдставляли собой бСзымянныС строковыС константы, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² выраТСниях с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ cout, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ:

cout << "hello world.\n";

Но Π² C++ строку ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ массив символов, Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉΡΡ ΠΊΠΎΠ½- Ρ†Π΅Π²ΡŒΡˆ Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ символом строки. Π’Π°ΠΊΠΎΠΉ массив ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ массив, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: