2010-02-28 11 views
15

Sto ancora imparando C++ e sto cercando di capirlo. Stavo guardando attraverso un codice e ho visto:Variabili dopo i due punti in un costruttore

point3(float X, float Y, floatZ) : 
x(X), y(Y), z(Z) // <----- what is this used for 
{ 
} 

Qual è il significato della "x (X), Y (Y), Z (Z)" seduto accanto parametri del costruttore?

+1

Duplicato di http://stackoverflow.com/questions/1272680/c-constructor-syntax-question-noob. Vedi anche http://stackoverflow.com/questions/1632484/c-initialization-question – outis

risposta

17

È un modo di invocare i costruttori dei membri della classe point3. se x, y, z sono galleggianti, allora questo è solo un modo più efficiente di scrivere questo

point3(float X, float Y, float Z): 
{ 
    x = X; 
    y = Y; 
    z = Z; 
} 

Ma se x, y & z sono classi, allora questo è il solo modo per passare parametri nelle loro costruttori

+0

Per chiarire: Se i membri sono tipi non PoD, i membri non verranno costruiti in modo predefinito e non sarà necessario invocare un costruttore di copia su tali membri se si utilizza un elenco di inizializzazione. Pertanto, è più efficiente. – greyfade

+1

** 'PoD' =" semplici vecchi dati " – isomorphismes

4

Nel tuo esempio point3 è la constructor della classe con lo stesso nome (point3), e la roba a destra del colon : prima della parentesi di apertura { è il initialization list, che a sua costrutti sua volta (cioè inizializza) point3 variabili membro 's (e può anche essere usato per passare gli argomenti per i costruttori della classe base [es], se presente.)

9

Initialization list

This articolo (una deve leggere) al così spiega Elenchi di inizializzazione dei membri

+3

Sfortunatamente l'articolo da leggere non è più lì, e la pagina di elenco di inizializzazione non si stava caricando quando ho letto questo. Puoi espandere la tua risposta in modo che i link non siano un problema? – Ceribia

0

Inizializzazione del membro come altri hanno sottolineato. Ma è più importante sapere quanto segue:

Quando gli argomenti sono del tipo float o altri tipi built-in, non ci sono chiari vantaggi tranne che utilizzando l'inizializzazione del membro piuttosto che l'assegnazione (nel corpo del costruttore) è più idiomatico in C++.

Il chiaro vantaggio è che se gli argomenti sono di classi definite dall'utente, l'inizializzazione di questo membro risulterebbe nelle chiamate per copiare i costruttori rispetto ai costruttori predefiniti se eseguita utilizzando assegnazioni (nel corpo del costruttore).

Problemi correlati