public:
cl (int j) // Конструктор
{ i=j; }
int get_i() { return i; }
};
cl а[9]; // Ошибка, конструктору необходим список инициализации
Этот оператор не работает, поскольку предполагается, что класс cl не имеет параметров, так как в объявлении массива не указан список инициализации. Однако класс cl не содержит конструкторов, не имеющих параметров. Итак, поскольку данному объявлению не соответствует ни один конструктор, компилятор выдаст сообщение об ошибке. Чтобы решить эту проблему, необходимо перегрузить конструктор, добавив вариант, не имеющий параметров, как показано ниже. Теперь в программе можно объявить оба вида массива:
Особая ситуация возникает, когда необходимо создать как инициализированные, так и неинициализированные массивы объектов. Рассмотрим следующий класс:
Здесь в классе cl определен конструктор с одним параметром. Это значит, что любой массив такого типа должен быть инициализирован.
Т.о. массив нельзя объявить обычным образом:
class cl {
int i; public:
cl() {i=0;} // для неинициализированных массивов
cl(int j) { i=j; } // для инициализированных массивов
int get_i() { return i; }
};
В таком варианте программы допускаются следующие операторы:
// Инициализированный массив
cl a1[3] = {3, 5, 6};
// Неинициализированный массив
cl а2[34];