Инициализировать массив объектов класса в конструкторе другого класса - PullRequest
6 голосов
/ 22 декабря 2011

Если у меня есть класс:

class A
{
private:
     char z;
     int x;

public:
     A(char inputz, int inputx);
     ~A() {}
}

Я хочу сделать массив A в классе B.

class B
{
private:
    A arrayofa[26];

public:
    B();
    ~B() {}
    void updatearray(); // This will fill the array with what is needed.
}


class B
{
    B:B()
    {
        updatearray();
        std::sort( &arrayofa[0], &arrayofa[26], A::descend );
    }
}

Как я могу явно инициализировать arrayofa в конструкторе B?

Ответы [ 3 ]

3 голосов
/ 22 декабря 2011

Вы не можете.

Каждый элемент в массиве будет инициализирован конструктором по умолчанию (без конструктора параметров).

Лучшая альтернатива - использовать вектор.
Здесь вы указываете значение, которое будетбыть скопированным во все члены вектора:

class B
{
private:
     std::vector<A> arrayofa;
public:
     B()
        : arrayofa(26, A(5,5))
          // create a vector of 26 elements.
          // Each element will be initialized using the copy constructor
          // and the value A(5,5) will be passed as the parameter.
     {}
     ~B(){}
     void updatearray();//This will fill the array with what is needed
}
3 голосов
/ 22 декабря 2011

Конструктор по умолчанию будет вызываться автоматически (для не POD).Если вам нужен другой конструктор, вам не повезло, но вы можете использовать vector, который будет поддерживать то, что вам нужно.

1 голос
/ 22 декабря 2011

Сначала должен быть конструктор по умолчанию для class A, иначе B() не скомпилируется.Он попытается вызвать конструктор по умолчанию для членов class B до того, как тело конструктора начнет выполняться.

Вы можете инициализировать arrayofa следующим образом:

void B::updatearray()
{
    arrayofa[0] = A('A', 10);
    arrayofa[1] = A('B', 20);
    ...
}

Это будетлучше использовать std::vector вместо массива.

std::vector<A> v(26, A('a', 10)); //initialize all 26 objects with 'a' and 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...