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

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

<Название класса> <Название переменной>[<Количество объектов>];

Однако при отсутствии конструктора без параметров это объявление приведет к ошибке. В этом случае необходимо явно передать значения конструктору при объявлении массива объектов.

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

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

#include <iostream>

class C {
   int x_;
public:
   C(int x) { x_ = x; }
   int getX() { return x_; }
};

int main() {
   C obj[2] = { 10, 20 };
   std::cout << obj[0].getX() << std::endl; // 10
   std::cout << obj[1].getX() << std::endl; // 20
   return 0;
}

Если конструктор содержит несколько параметров или перед объявлением конструктора с одним параметром, указано ключевое слово explicit, то необходимо применять полную форму инициализации (листинг 13.18).

Листинг 13.18. Полная форма инициализации массива объектов

#include <iostream>

class C {
   int x_, y_;
public:
   C(int x, int y) { x_ = x; y_ = y; }
   int getX() { return x_; }
};

int main() {
   C obj[2] = { C(10, 20), C(30, 40) };
   std::cout << obj[0].getX() << std::endl; // 10
   std::cout << obj[1].getX() << std::endl; // 30
   return 0;
}

Учебник C++ (MinGW-W64)
Учебник C++ (MinGW-W64) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов