2011-11-22 16 views
7
class gene{ 
    int ind; 

    gene() { 
     ind = 0; 
    } 
} 

class network { 
    gene g[10]; 
} 

main() { 
    network n; 
} 

¿Debo llamar al constuctor para cada objeto en la matriz g, o se llamará automáticamente?¿Se llama inmediatamente al constructor para una matriz de objetos como miembro de la clase?

por ejemplo, debo cambiar la clase de red de la siguiente manera:

class network { 
    gene g[10]; 

    network() { 
     for(int i = 0; i < 10; i++) 
      g[i] = gene(); 
    } 
} 
+2

Si no se ha construido ya, el cambio sería un desastre. Llamarías a 'operator =' en un objeto no construido. –

+2

No estoy tratando de ser sarcástico, pero en el tiempo que te tomó hacer la pregunta, podrías haberlo probado. –

+3

@Steve: las pruebas solo probarían el comportamiento de un compilador, que no es necesariamente lo que garantiza el estándar. – ildjarn

Respuesta

7

En su caso, porque gene tiene un constructor por defecto no trivial, cada elemento de la matriz será default-construida para usted. Es decir, no, su cambio es innecesario.

En el caso de que el tipo subyacente de su matriz sea un tipo POD, será necesario para inicializar los elementos manualmente. Sin embargo, la forma en que lo haces no es ideal; que se quiere utilizar valor de inicialización lugar:

class network { 
    somePodType x[10]; 
public: 
    network() : x() { } 
}; 
Cuestiones relacionadas