2012-07-20 10 views
5

Questo è il mio codice di esempio:Chiamare il costruttore di un'altra classe tramite l'elenco di inizializzazione. Avendo problemi

#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; 
} 

Perché mi appare una potenza di 0? http://ideone.com/pf47j

Inoltre, in generale, qual è il metodo giusto per creare un oggetto membro in un'altra classe e chiamare il costruttore di tale oggetto, come è stato fatto in precedenza con base oggetto class Base, all'interno class Bar?

+0

'Base di base;' non 'Base di base (int v, char z);'. Leggi un buon libro. –

+0

Il codice nel tuo link è diverso dal codice che hai sopra – mathematician1975

+0

Oltre a ciò che ha detto Cat Plus Plus, devi usare 'm' e' n'. 'q' e' s' non sono stati inizializzati prima di costruire 'base'. – IronMensan

risposta

6

L'ordine di inizializzazione dei membri dei dati segue l'ordine di dichiarazione, non l'ordine in cui viene elencato il loro inizializzatore. Pertanto, Bar::base viene sempre inizializzato prima di Bar::q e Bar::s.
Come illustrato in http://ideone.com/M6iKR, per Bar::Bar(int m, char n), l'inizializzazione di base utilizzando m e n funziona correttamente.

+1

quando usi' m, n' invece di 'q, s', l'ordine non ha importanza. –

+0

Grazie Ho appena spostato la dichiarazione di Bar :: base sotto q e s. – user1084113

Problemi correlati