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

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

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

Листинг 12.4. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ массива ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² 

1: // Листинг 12.4. Массив ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

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 itsAge;

16:      int itsWeight;

17: };

18:

19: int main()

20: {

21:    CAT Litter[5];

22:    int i;

23:    for (i = 0; i < 5; i++)

24:       Litter[i].SetAge(2*i +1);

25:

26:    for (i = 0; i < 5; i++)

27:    {

28:       cout << "cat #" << i + 1<< ": ";

29:       cout << Litter[i].GetAge() << endl;

30:    }

31:    return 0;

32: }


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

cat #1: 1

cat #2: 3

cat #3: 5

cat #4: 7

cat #5: 9


Анализ: Π’ строках 5β€”17 ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ класс CAT. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса CAT ΠΌΠΎΠ³Π»ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ объявлСнии массива, Π² этом классС Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ конструктор, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. ВспомнитС, Ρ‡Ρ‚ΠΎ Ссли Π² классС создан ΠΊΠ°ΠΊΠΎΠΉ- Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ конструктор, Ρ‚ΠΎ конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒΡΡ компилятором ΠΈ Π²Π°ΠΌ придСтся ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ самим.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» for (строки 23 ΠΈ 24) заносит значСния возраста кошСк Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса, сохранСнныС Π² массивС. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ†ΠΈΠΊΠ» for (строки 26β€”30) обращаСтся ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒΠΎΠ±ΡŠΠ΅ΠΊ- Ρ‚Ρƒ, ΡΠ²Π»ΡΡŽΡ‰Π΅ΠΌΡƒΡΡ элСмСнтом массива, ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ для Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ GetAge().

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ GetAge() для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΡΠ²Π»ΡΡŽΡ‰Π΅Π³ΠΎΡΡ элСмСнтом массива, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ индСксации ([]) ΠΈ прямого доступа ΠΊ Ρ‡Π»Π΅Π½Ρƒ класса (.), Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Π°.

ΠœΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы

МоТно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ массив, содСрТащий Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ измСрСния. Доступ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΡŽ открываСтся своим индСксом. Π’Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ элСмСнту Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива, Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π΄Π²Π° индСкса; ΠΊ элСмСнту Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива β€” Ρ‚Ρ€ΠΈ индСкса ΠΈ Ρ‚.Π΄. ВСорСтичСски ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ массив любой мСрности, Π½ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ ΠΈ Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы.

Π₯ΠΎΡ€ΠΎΡˆΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½Ρ‹ΠΌ Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива являСтся ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Π½Π°Ρ доска, состоящая ΠΈΠ· ΠΊΠ»Π΅Ρ‚ΠΎΠΊ, собранных Π² восСмь рядов ΠΈ восСмь столбцов (рис. 12.3).

Рис. 12.3. Шахматная доска ΠΈ Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив


ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ объявлСн класс SQUARE. ОбъявлСниС Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива Board для сохранСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² этого класса Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

SQUARE Board[8][8];

Π­Ρ‚ΠΈ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠΌ массивС с 64 элСмСнтами:

SGUARE Board[64];

ИспользованиС Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅, Ссли Ρ‚Π°ΠΊΠΎΠΉ массив Π»ΡƒΡ‡ΡˆΠ΅ ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²Π΅Ρ‰Π΅ΠΉ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΌΠΈΡ€Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΈ создании ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ³Ρ€Ρ‹ Π² ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Ρ‹. Π’Π°ΠΊ, Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΈΠ³Ρ€Ρ‹ ΠΊΠΎΡ€ΠΎΠ»ΡŒ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ряду. Π‘ ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ сдвига позиция этой Ρ„ΠΈΠ³ΡƒΡ€Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚ прСдставлСна ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ массива:

Board[0][3];

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ прСдполагаСтся, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ индСкс Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½ΡƒΠΌΠ΅Ρ€Π°Ρ†ΠΈΡŽ рядов, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” столбцов. БоотвСтствиС элСмСнтов массива ΠΊΠ»Π΅Ρ‚ΠΊΠ°ΠΌ ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Π½ΠΎΠΉ доски наглядно ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рис. 12.3.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива

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

int theArray[5][3]:

Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Ρ‚Ρ€ΠΈ значСния Π±ΡƒΠ΄ΡƒΡ‚ записаны Π² массив theArray[0], Π²Ρ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Ρ€ΠΈ значСния β€” Π² массив theArray[1] ΠΈ Ρ‚.Π΄.

Π£ΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ массив ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ строкой:

int theArray[5][3] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π·Π°ΠΏΡƒΡ‚Π°Ρ‚ΡŒΡΡ Π² числах, значСния ΠΌΠΎΠΆΠ½ΠΎ ΡΠ³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с помошью Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

int theArray[5][3] = {{1,2,3}, {4,5,6}, {7,8,9}, {10,11,12}, {13,14,15}};

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ всС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки. ВсС значСния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹ запятыми нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π²Ρ‹ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки ΠΈΠ»ΠΈ Π½Π΅Ρ‚. Π’Π΅ΡΡŒ список Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ Π²ΠΎ внСшниС Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки, ΠΈ послС Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ скобки ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ устанавливаСтся символ Ρ‚ΠΎΡ‡ΠΊΠΈ с запятой.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ создания Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива ΠΏΠΎΠΊΠ°Π·Π°Π½ Π² листингС 12.5. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ряд Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива содСрТит Ρ†Π΅Π»Ρ‹Π΅ числа ΠΎΡ‚ 0 Π΄ΠΎ 4, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” ΡƒΠ΄Π²ΠΎΠ΅Π½Π½Ρ‹Π΅ значСния ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… элСмСнтов ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ряда.

Листинг 12.5. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива 

1: #include <iostream.h>

2: int main()

3: {

4:    int SomeArray[5][2] = { { 0,0} , { 1,2} , { 2,4} , { 3,6} , { 4,8} }

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

6:    for (int j=0; j<2; j++)

7:    {

8:       cout << "SomeArray[" << i << "][" << j << "]: ";

9:       cout << SomeArray[i][j]<< endl;

10:   }

11:

12:   return 0;

13: }


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

SomeArray[0][0]: 0 ' '' " SomeArray[0][1]: 0 SomeArray[1][0]: 1 SomeArray[1][1]: 2 SomeArray[2][0]: 2 SomeArray[2][1]: 4 SomeArray[3][0]: 3 SomeArray[3][1]: 6 SomeArray[4][0]: 4 SomeArray[4][1]: 8


Анализ: Π’ строкС 4 ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ряд содСрТит ΠΏΡΡ‚ΡŒ цСлочислСнных Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ ряд прСдставлСн двумя значСниями. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ создаСтся конструкция ΠΈΠ· дСсяти элСмСнтов (5x2), ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рис. 12.4.



Рис. 12.4. Массив 5x2


Π”Π°Π½Π½Ρ‹Π΅ вводятся Π² массив ΠΏΠΎΠΏΠ°Ρ€Π½ΠΎ, хотя ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΉ строкой. Π—Π°Ρ‚Π΅ΠΌ осущСствляСтся Π²Ρ‹Π²ΠΎΠ΄ Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π²ΡƒΡ… Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»ΠΎΠ² for. Π’Π½Π΅ΡˆΠ½ΠΈΠΉ Ρ†ΠΈΠΊΠ» ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ индСксы ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ряда, Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ β€” индСксы Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ряда. Π’ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ выводятся Π½Π° экран: сначала ΠΈΠ΄Π΅Ρ‚ элСмСнт SomeArray[0][0], Π·Π°Ρ‚Π΅ΠΌ элСмСнт SomeArray[0][1]. ΠŸΡ€ΠΈΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ индСкса ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ряда происходит послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ индСкс Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ряда становится Ρ€Π°Π²Π½Ρ‹ΠΌ 1, послС Ρ‡Π΅Π³ΠΎ вновь Π΄Π²Π°ΠΆΠ΄Ρ‹ выполняСтся Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Ρ†ΠΈΠΊΠ».

НСсколько слов ΠΎ памяти

ΠŸΡ€ΠΈ объявлСнии массива компилятору Ρ‚ΠΎΡ‡Π½ΠΎ указываСтся, сколько ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² планируСтся Π² Π½Π΅ΠΌ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠ°ΠΌΡΡ‚ΡŒ для всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² массива, Π΄Π°ΠΆΠ΅ Ссли Π΄Π°Π»Π΅Π΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΎΠ½ΠΈ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Π΄Π°Π½Ρ‹. Если Π²Ρ‹ Π·Π°Ρ€Π°Π½Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ Π·Π½Π°Π΅Ρ‚Π΅, сколько элСмСнтов Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ массив, Ρ‚ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚. НапримСр, ΡˆΠ°Ρ…ΠΌΠ°Ρ‚Π½Π°Ρ доска всСгда ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 64 ΠΊΠ»Π΅Ρ‚ΠΊΠΈ, Π° ΠΎΡ‚ кошки ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π½Π΅ Ρ€ΠΎΠ΄ΠΈΡ‚ Π±ΠΎΠ»Π΅Π΅ 10 котят. Если ΠΆΠ΅ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ нСизвСстно, сколько элСмСнтов Π±ΡƒΠ΄Π΅Ρ‚ Π² массивС, Ρ‚ΠΎ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠ΅ срСдства управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ.

Π’ этой ΠΊΠ½ΠΈΠ³Π΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ срСдства программирования, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ массивы ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, массивы с Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ памяти Π² области динамичСского ΠΎΠ±ΠΌΠ΅Π½Π° ΠΈ ряд Π΄Ρ€ΡƒΠ³ΠΈΡ… возмоТностСй. Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ срСдствах программирования, ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ возмоТности, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π² ΠΌΠΎΠ΅ΠΉ ΠΊΠ½ΠΈΠ³Π΅ C++ Unleashed, Π²Ρ‹ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠΉ ΠΈΠ·Π΄Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎΠΌ Sams Publishing. И Π²ΠΎΠΎΠ±Ρ‰Π΅, всСгда слСдуСт ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΊΠΈΠΌ Π±Ρ‹ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ программистом Π²Ρ‹ Π½ΠΈ Π±Ρ‹Π»ΠΈ, всСгда остаСтся Ρ‚ΠΎ, Ρ‡Π΅ΠΌΡƒ слСдовало Π±Ρ‹ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ, ΠΈ всСгда Π΅ΡΡ‚ΡŒ источники, ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‡Π΅Ρ€ΠΏΠ½ΡƒΡ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ ΡΠ²Π΅ΠΆΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ.

ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ

ВсС массивы, рассмотрСнныС Π½Π°ΠΌΠΈ Π΄ΠΎ сих ΠΏΠΎΡ€, Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈ значСния своих элСмСнтов Π² стСках памяти. ИспользованиС стСковой памяти связано с рядом ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ, Ссли ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΎΠΉ области динамичСской памяти. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Ссли сначала ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ массива Π² области динамичСской памяти, Π° Π·Π°Ρ‚Π΅ΠΌ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π² массивС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° эти ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сократит ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ стСковой памяти ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°. Π’ листингС 12.6 ΠΏΠΎΠΊΠ°Π·Π°Π½ Ρ‚ΠΎΡ‚ ΠΆΠ΅ массив, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π² листингС 12.4, Π½ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ всС Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ сохранСны Π² области динамичСской памяти. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π²ΠΎΠ·Ρ€ΠΎΡΡˆΡƒΡŽ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ использования памяти ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ, Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Π±Ρ‹Π» ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ с 5 Π΄ΠΎ 500 ΠΈ Π΅Π³ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ с Litter (ΠΏΠΎΠΌΠ΅Ρ‚) Π½Π° Family (сСмья).

Листинг 12.6. Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ массива Π² области динамичСской памяти

1: // Листинг 12.6. Массив ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° ΠΎΠ±ΡŒΠ΅ΠΊΡ‚Ρ‹ 2:

3: #include <iostream.h>

4:

5: class CAT

6: {

7:    public:

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

9:       ~CAT() { } // destructor

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

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

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

13:

14:   private:

15:      int itsAge;

16:      int itsWeight;

17: };

18:

19: int main()

20: {

21:    CAT * Family[500];

22:    int i;

23:    CAT * pCat;

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

25:    {

26:       pCat = new CAT;

27:       pCat->SetAge(2*i +1);

28:       Family[i] = pCat;

29:    }

30:

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

32:    {

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

34:       cout << Family[i]->GetAge() << endl;

35:    }

36:    return 0;