2011-09-29 9 views
6

Estoy tratando de aprender a inicializar listas.listas de inicialización de C++ para múltiples variables

Tengo una clase simple debajo y trato de inicializar la lista de variables. El primer Month(int m): month(m) funciona. Estoy tratando de hacer algo similar debajo de esa línea con más de una variable. ¿Es esto posible en ese formato? ¿Tendría que separarme del único trazador de líneas?

class Month 
{ 
public: 
    Month(int m) : month(m) {} //this works 
    Month(char first, char second, char third) : first(first){} : second(second){} : third(third){} //DOES NOT WORK 
    Month(); 
    void outputMonthNumber(); //void function that takes no parameters 
    void outputMonthLetters(); //void function that takes no parameters 
private: 
    int month; 
    char first; 
    char second; 
    char third; 
}; 

Obviamente no tengo mucha idea de cómo hacer esto, ninguna orientación sería apreciado, gracias

+2

¿Qué tipo de material de enseñanza está utilizando que le confunde con estas cosas? Escoja un libro decente en C++, y esto debería ser bastante directo ... –

+0

Me enseño a mí mismo, que cómo está ahora-a-days – dukevin

+0

Merece la pena señalar que las listas de inicialización se inicializan en el orden en que se declaran las variables en su clase y no el orden en que se declaran en la lista en sí. –

Respuesta

9

Prueba esto:

Month(char first, char second, char third) 
    : first(first), second(second), third(third) {} 

[Usted puede hacer esto como una sola línea . Lo he dividido simplemente por presentación.]

Las llaves vacías {} son el cuerpo único del constructor, que en este caso está vacío.

+0

Gracias, ahora veo :) – dukevin

0

Los inicializadores están separados por comas, y su constructor debe tener un solo cuerpo.

5
Month(char first, char second, char third) 
     : first(first) 
     , second(second) 
     , third(third) 
{} //DOES WORK :) 
+2

Recibí 2 votos favorables para el formato bonito :) –

3

Como han señalado otros, es solo una lista de elementos separados por comas. La sintaxis variable(value) es solo una forma predeterminada de construir tipos primitivos de datos; puede usar este método fuera de las listas de inicialización, por ejemplo. Además, si un miembro de tu clase también es una clase con un constructor, lo llamarías exactamente de la misma manera.

No solo está obligado a poner la lista en la declaración de la clase, solo para referencia futura. Este código está perfectamente bien, por ejemplo

class Calender{ 
    public: 
     Calender(int month, int day, int year); 
    private: 
     int currentYear; 
     Time time; 
}; 

Calender::Calender(int month, int day, int year) : currentYear(year), time(month, day) { 
    // do constructor stuff, or leave empty 
}; 
Cuestiones relacionadas