Почему не было добавлено yield в C ++ 0x?

Хороший вопрос. У меня был тот же вопрос, и я нашел его здесь. Реальный ответ: @ 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"

Таким образом, вам не нужно беспокоиться об инициализации идентификаторов, поскольку они управляются внутри.

30
задан Atifm 9 February 2016 в 20:52
поделиться