Конструктор, инициализирующий массив подобъектов? - PullRequest
1 голос
/ 22 апреля 2010

Скажем, у меня есть несколько объектов в классе, каждый из которых требует создания с различным значением. Я могу написать что-то вроде этого:

class b
{
public:
  b(int num)
    {
    // 1 for a.b1, and 2 for a.b2
    }
};

class a
{
public:
  b b1;
  b b2;
  a() : b1(1), b2(2)
    {
    }
};

Однако возможно ли сделать то же самое, если эти несколько объектов хранятся в массиве?

Моя первая попытка не скомпилируется:

class a
{
public:
  b bb[2];
  a() : bb[0](1), bb[1](2)
    {
    }
};

1 Ответ

2 голосов
/ 22 апреля 2010

Вы не можете сделать это напрямую;вам нужно инициализировать элементы массива в теле конструктора.

Элементы массива создаются по умолчанию перед вводом тела конструктора.Поскольку ваш пример класса b не является конструируемым по умолчанию (т. Е. У него нет конструктора, который можно вызвать с нулевыми параметрами), вы не можете иметь массив b в качестве переменной-члена.

Youможет иметь массив типа, который не может быть использован по умолчанию в других контекстах, когда вы можете явно инициализировать массив .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...