2010-08-17 19 views
5

duplicados posibles:
C++ weird constructor syntax
Variables After the Colon in a Constructor
What does a colon (:) following a C++ constructor name do?¿Qué significa el colon en un constructor?

Para la función de C++ a continuación:

cross(vector<int> &L_, vector<bool> &backref_, vector< vector<int> > &res_) : 

    L(L_), c(L.size(), 0), res(res_), backref(backref_) { 

    run(0); 

} 

Lo que hace los dos puntos (":") decir la las relaciones sean entre su parte izquierda y derecha? Y posiblemente, ¿qué se puede decir de este fragmento de código?

+0

Votación para cerrar como un duplicado, pero el título de la pregunta original deja mucho que desear. ¿Debería ser editado quizás? – Troubadour

+0

jeje, buenos inspectores – luna

+3

No veo un problema importante con el título de la pregunta 'sintaxis extraña'. El problema real con ambas preguntas es que una vez que sabes buscar "lista de inicializadores" tu problema ya ha sido resuelto. Creo que mantener 'constructor' en el título es útil, sin embargo. Un ':' es casi indescifrable en cualquier caso; quizás deletrearlo 'colon' ayudaría, no sé. –

Respuesta

4

Esta es una forma de inicializar los campos de miembro de la clase antes de que se llame realmente el controlador de la clase.

Suponga que tiene:

class A { 

    private: 
     B b; 
    public: 
     A() { 
      //Using b here means that B has to have default c'tor 
      //and default c'tor of B being called 
     } 
} 

Así que ahora por la escritura:

class A { 

    private: 
     B b; 
    public: 
     A(B _b): b(_b) { 
      // Now copy c'tor of B is called, hence you initialize you 
      // private field by copy of parameter _b 
     } 
} 
+0

gracias, ¿qué es un "c'tor" por favor? – luna

+0

c'tor == constructor – John

+0

@John: Ok, mira, sí ahorró tiempo – luna

4

Es una lista de inicialización de miembros.

Está configurando cada una de las variables miembro a los valores entre paréntesis en la parte después de dos puntos.

+0

¡De nada! – John

3

Como muchas cosas en C++, : se utiliza para muchas cosas, pero en su caso es el inicio de una lista de inicializadores

Otros usos son, por ejemplo, public/private/protected, después de una etiqueta case, como parte de un operador ternario, y probablemente algunos otros.

+0

Nota: el sujeto fue modificado después de mi respuesta para ser más específico. –