Страницы

Поиск по вопросам

вторник, 30 октября 2018 г.

Конструктор массива классов

Есть класс корабль, по-умолчанию он инициализируется параметром, который содержит в себя информацию о количестве палуб. Я пытаюсь инициализировать массив, вызвав конструктор, вот так:
Ship ship[SHIP_COUNT](DECK_X4);
Этот код естественно не проходит. И нельзя создать у него метод SetDeck, потому что это будет перечить логике создания кораблей (иначе размер можно будет менять постоянно).
Как можно создать массив класса, вызвав при этом для каждого элемента массива конструктор?


Ответ

Если вы уж пишете на C++, я бы посоветовал отказаться от сишных массивов, и пользоваться нормальными контейнерами.
Для std::vector
std::vector ship; ship.reserve(SHIP_COUNT); for (int i = 0; i < SHIP_COUNT; i++) ship.emplace_back(DECK_X4);

Уточнение: как подсказывает @alexolut, в проектах RAD Studio есть возможность переключаться между старым и новым компиляторами (опция classic compiler в свойствах проекта). Стандарт C++11 поддерживается лишь новым компилятором, поэтому если в проекте используется старый, нужно воспользоваться
push_back(Ship(DECK_X4));
вместо emplace_back

Комментариев нет:

Отправить комментарий