Программирование >>  Дополнительные возможности наследования 

1 ... 105 106 107 [ 108 ] 109 110 111 ... 265


Получение доступа к данным переменных-членов объекта, сохраненного в массиве, идет в два этапа. Сначала с помошью оператора индексирования ([]) нужно указать элемент массива, а затем обратиться к конкретной переменной-члену с помощью оператора прямого обращения к члену класса (.). В листинге 12.4 показано создание массива для пяти объектов типа CAT.

Аистииг 12.4. Создание массива оОъектвв

2 3 4 5 6 7 8 9

10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32

Листинг 12.4. Массив объектов

flinclude <iostream.h>

class CAT {

public:

CATO { itsAge = 1: itsWeight=5: } -CATO { }

int GetAgeO const { return itsAge; } int GetWeightO const { return itsWeight: void SetAge(int age) { itsAge = age; }

private: int itsAge: int itsWeight;

int mainO {

CAT Litter[5]; int i;

for (1=0; i < 5; i++) Litter[i],SetAge(2.i +1);

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

cout cat # i+1<< : ; cout Litter[i].GetAgeO << endl;

return 0; }

cat #1

cat #2

cat #3

cat #4

cat #5

В строках 5-17 объявляется класс CAT. Чтобы объекты класса CAT могли создаваться при объявлении массива, в этом классе должен использовать-



ся конструктор, заданный по умолчанию. Вспомните, что если в классе создан какой-нибудь другой конструктор, то конструктор по умолчанию не будет предоставляться компилятором и вам придется создавать его самим.

Первый цикл for (строки 23 и 24) заносит значения возраста кошек в объекты класса, сохраненные в массиве. Следующий цикл for (строки 26-30) обращается к каждому объекту, являющемуся элементом массива, и вызывает для выбранного объекта метод GetAge().

Чтобы применить метод GetAgeO для объекта, являющегося элементом массива, используются последовательно операторы индексации ([]) и прямого доступа к члену класса ( ), а также вызов функции-члена.

Многомврныб массивы

Можно создать и использовать массив, содержащий более одного измерения. Доступ к каждому измерению открывается своим индексом. Так, чтобы получить доступ к элементу двухмерного массива, нужно указать два индекса; к элементу трехмерного массива - три индекса и т.д. Теоретически можно создать массив любой мерности, но, как правило, в профаммах используются одномерные и двухмерные массивы.

Хорошим примерным двухмерного массива является шахматная доска, состоящая из клеток, собранных в восемь рядов и восемь столбцов (рис. 12.3).


Рис. 12.3. Шахматная доска и двухмерный массив

Предположим, что в профамме объявлен класс SQUARE. Объявление двухмерного массива Board для сохранения объектов этого класса будет выглядеть следующим образом:

SQUARE Board[8][8]:

Эти же объекты можно было сохранить в одномерном массиве с 64 элементами:

SQUARE Board[64];

Использование двухмерного массива может оказаться предпочтительнее, если такой массив лучше отражает положение вещей в реальном мире, например при создании профаммы ифы в шахматы. Так, в начале ифы король занимает четвертую позицию в первом ряду. С учетом нулевого сдвига позиция этой фигуры будет представлена объектом массива:

Board[0][3];



в этом примере предполагается, что первый индекс будет контролировать нумерацию рядов, а второй - столбцов. Соответствие элементов массива клеткам шахматной доски наглядно показано на рис. 12.3.

Инициализация многомерного массива

Многомерный массив также можно инициализировать одновременно с объявлением. При этом следует учитывать, что сначала весь цикл значений проходит индекс, указанный последним, после чего изменяется предпоследний индекс. Таким образом, если есть массив

int theArray[5][3]:

то первые три значения будут записаны в массив theArray[0], вторые три значения - в массив theArray[l] и т.д.

Указанный массив можно инициализировать следующей строкой:

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. Первый ряд двухмерного массива содержит целые числа от О до 4, а второй - удвоенные значения соответствующих элементов первого ряда.

Листинг 12J. Созданив мивгвмерного массива

ffinclude <iostream.h>

int mainO

int SomeArray[5][2] = { { 0,0} , { 1,2} , { 2,4} , { 3,6} , { 4,8} } for (int 1=0; i<5; i++)

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

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

return 0; }



1 ... 105 106 107 [ 108 ] 109 110 111 ... 265

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика