2011-12-22 9 views
5

Si tengo una clase:Inicializar variedad de objetos de clase en el constructor de otra clase

class A 
{ 
private: 
    char z; 
    int x; 

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

Quiero hacer una serie de A en clase 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); 
    } 
} 

¿Cómo explícitamente inicializar arrayofa en el constructor de B?

+0

La construcción de objetos en un constructor a menudo es una mala idea. ¿Cuál es exactamente tu objetivo? – Corbin

+0

¿Qué es 'A :: descender'? La forma normal de ordenar las cosas en orden descendente es definir los operadores de comparación normales para la clase y luego usar 'std :: greater'. –

Respuesta

2

Se llamará automáticamente al constructor predeterminado (para los que no sean POD). Si necesita un constructor diferente, no tiene suerte, pero puede usar vector en su lugar, que será compatible con lo que necesita.

3

No puede.

Cada elemento de la matriz se inicializará con el constructor predeterminado (sin constructor de parámetros).

La mejor alternativa es utilizar un vector.
Aquí se especifica un valor que va a ser distribuido, copiado construido en todos los miembros del vector:

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 
} 
1

En primer lugar debe haber un constructor por defecto para class A, de lo contrario B() no se compilará. Tratará de llamar al constructor predeterminado de miembros de class B antes de que el cuerpo del constructor comience a ejecutarse.

puede inicializar arrayofa así:

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

Sería mejor utilizar std::vector en lugar de matriz.

std::vector<A> v(26, A('a', 10)); //initialize all 26 objects with 'a' and 10 
Cuestiones relacionadas