Хороший вопрос. У меня был тот же вопрос, и я нашел его здесь. Реальный ответ: @ Dan-Paradox, нет стандартного синтаксического способа сделать это. Итак, все эти ответы - это множество альтернатив, чтобы обойти проблему.
Я сам прочитал ответы и особо не нашел ни одного из них идеальным для моего личного соглашения. Метод, который я, вероятно, придерживаюсь, использует конструктор по умолчанию и метод set
:
class MyClass { int x,y,z; public: MyClass(): x(0), y(0), z(0) {} MyClass(int _x,int _y,int _z): x(_x), y(_y), z(_z) {} // for single declarations void set(int _x,int _y,int _z) { x=_x; y=_y; z=_z; } };
Стандартный конструктор инициализации все еще существует, поэтому я все еще могу его инициализировать, t нужно больше одного, но в противном случае у меня есть метод set
, который устанавливает все переменные, которые инициализируются в конструкторе. Таким образом, я мог бы сделать что-то вроде этого:
int len=25; MyClass list = new MyClass[len]; for(int i = 0; i < len; i++) list[i].set(1,2,3);
Это прекрасно работает и протекает естественным образом, не делая код запутанным.
Теперь это мой ответ для тех, кто задается вопросом, как объявите массив объектов, которые должны быть инициализированы.
В частности, вы пытаетесь дать массив идентификаторов автомобилей, которые, я полагаю, вы хотите всегда быть уникальными. Вы можете сделать это с помощью моего метода, который я объяснил выше, а затем в цикле for
использовать i+1
в качестве аргумента, переданного методу set
, но из того, что я прочитал в ваших комментариях, кажется, что вы хотите Иды более внутренне инициированы, так что по умолчанию у каждого автомобиля есть уникальный идентификатор, даже если кто-то использует ваш класс Car
.
Если это то, что вы хотите, вы можете использовать статический член:
class Car { static int current_id; int id; public: Car(): id(current_id++) {} int getId() { return id; } }; int Car::current_id = 1; ... int cars=10; Car* carlist = new Car[cars]; for(int i = 0; i < cars; i++) cout<<carlist[i].getId()<<" "; // prints "1 2 3 4 5 6 7 8 9 10"
Таким образом, вам не нужно беспокоиться об инициализации идентификаторов, поскольку они управляются внутри.