2012-07-20 19 views
5

Este es mi código de ejemplo:Llamando al constructor de otra clase a través de la lista de Inicialización. Tener problemas

#include <iostream> 
using namespace std; 

class Base 
{ 
public: 
    Base (int v, char z) {x=v;y=z;}; 
    int x; 
    char y; 
}; 

class Bar 
{ 
public: 
    Bar(int m, char n):q(m),s(n),base(q,s){}; 
    Base base; 
    int q; 
    char s;  
}; 

int main() 
{ 
    Bar barObj(5,'h');  
    cout << barObj.base.x << barObj.base.y << endl;  
    return 0; 
} 

¿Por qué recibo una potencia de 0? http://ideone.com/pf47j

También, en general, ¿cuál es el método correcto para crear un objeto miembro de otra clase y llamar al constructor de ese objeto, como se hizo anteriormente con la base del objeto de class Base, dentro class Bar?

+0

'Base base;' no 'Base base (int v, char z);'. Lee un libro apropiado. –

+0

El código en su enlace es diferente al código que tiene sobre – mathematician1975

+0

Además de lo que dijo Cat Plus Plus, necesita usar 'm' y' n'. 'q' y' s' no se han inicializado antes de construir 'base'. – IronMensan

Respuesta

6

El orden de inicialización de los miembros de los datos sigue su orden de declaración, no el orden en que aparecen sus inicializadores. Por lo tanto, Bar::base siempre se inicializa antes de Bar::q y Bar::s.
Como se muestra en http://ideone.com/M6iKR, para Bar::Bar(int m, char n), inicializar base usando m y n funciona bien.

+1

cuando usa' m, n' en lugar de 'q, s', el orden no importa. –

+0

Gracias acabo de mover la declaración de Bar :: base debajo de q y s. – user1084113

Cuestiones relacionadas