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

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

Инициализация массивов объектов

Если класс определяет конструктор с параметрами, то можно инициализировать каждый объект массива путем указания списка инициализации в точности так, как это делается для массивов
других типов. Однако точная форма списка инициализации будет определяться числом парамет­ров конструктора. Для объектов, чьи конструкторы имеют только один параметр, можно просто указать список начальных значений, используя обычный синтаксис инициализации массивов. Каждое значение в списке по порядку передается конструктору элемента в массиве при его создании. Например, ниже приведена программа, инициализирующая массив:

#include <iostream.h>
class cl {
int i;
public:
cl(int j) {i=j;} // конструктор
int get_i() {return i; }
};
int main()
{
cl ob[3] = {1, 2, 3}; // инициализаторы
int i;
for (i=0; i<5; i++)
cout << ob [ i ].get_i () << "\n";
return 0;
}

Эта программа выводит на экран числа 1, 2 и 3.

Если конструктор объекта требует два или большее число аргументов, тогда необходимо ис­пользовать слегка измененную форму инициализации, приведенную ниже:

#include <iostream.h>
class cl {
int h;
int i;
public:
cl(int j, int k) { h=j; i=k; } // конструктор
int get_i() {return i; }
int get_h() {return h; }
};
int main()
{
cl ob[3] = {
cl(1, 2),
cl(3, 4 ),
cl(5, 6)
}; // инициализаторы
int i;
for (i=0; i<3; i++) {
cout << ob[i].get_h();
cout << ", ";
cout << ob[i].get_i() << "\n";
}
return 0;
}

В этом примере конструктор класса cl имеет два параметра и поэтому требует два аргумента. В результате инициализация в укороченной форме записи не может использоваться. Вместо этого
применяется инициализация в длинной форме, как показано в примере. (Разумеется, можно ис­пользовать эту длинную форму инициализации во всех случаях.)