Программирование на C и C++

Онлайн справочник программиста на C и C++

Массивы объектов

Можно создавать массивы объектов точно так же, как создаются массивы данных других типов. Например, следующая программа создает класс display, содержащий информацию о различных адаптерах дисплеев, которые могут быть подключены к PC. В частности, он содержит число цве­тов, которые могут быть получены, и тип видеоадаптера. В функции main() создается массив из трех объектов display. Доступ к элементам этого массива осуществляется с помощью обычной процедуры с использованием индексов.

// пример массива объектов
#include <iostream.h>
enum disp_type {mono, cga, ega, vga};
class display {
int colors; // число цветов enum
disp_type dt; // тип дисплея
public:
void set_colors(int num) {colors = num; }
int get_colors() {return colors;}
void set_type (enum disp_type t) {dt = t; }
enum disp_type get_type() {return dt; }
};
char names [4 ] [5] = {
"mono",
"cga",
"ega",
"vga"
};
int main()
{
display monitors [3];
register int i;
monitors[0].set_type(mono);
monitors[0].set_colors(1);
monitors[1].set_type(cga);
monitors [1] .set_colors(4);
monitors[2].set_type(ega);
monitors [2] .set_colors(16);
for (1=0; i<3; i++) {
cout << names[monitors[i].get_type()] << " ";
cout << "has " << monitors[i].get_colors();
cout << " colors" << "\n";
}
return 0;
}

Эта программа выводит на экран следующий текст:

mono has 1 colors
cga has 4 colors
ega has 16 colors

Хотя это и не относится специально к массивам объектов, обратим внимание, каким образом двумерный символьный массив names использован для преобразования перечисляемых значений к их строковым эквивалентам. Для всех переменных перечисляемого типа, не содержащих явной инициализации, первая константа имеет значение 0, вторая 1 и т. д. Поэтому возвращаемое фун­кцией get_type() значение может быть использовано для индексации массива names, что позволя­ет вывести подходящее имя.

Многомерные массивы объектов индексируются в точности так же, как и массивы любых дру­гих типов данных.