2011-09-29 15 views
6

Sto cercando di imparare come inizializzare gli elenchi.Liste di inizializzazione C++ per più variabili

Ho una classe semplice di seguito e sto provando a inizializzare l'elenco delle variabili. Il primo Month(int m): month(m) funziona. Sto cercando di fare qualcosa di simile sotto quella linea con più di una variabile. È possibile in quel formato? dovrei staccarmi dall'unica nave?

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

Ovviamente non ho molto pallida idea di come fare questo, qualsiasi guida sarebbe apprezzato, grazie

+2

Che tipo di materiale didattico stai usando che ti confondi con queste cose? Raccogli un libro decente su C++, e questo dovrebbe essere abbastanza semplice ... –

+0

Insegnare a me stesso, che come è ora-a-giorni – dukevin

+0

Vale la pena notare che gli elenchi di inizializzazione sono inizializzati nell'ordine in cui le variabili sono dichiarate nel tuo classe e non l'ordine in cui sono dichiarati nella lista stessa. –

risposta

9

Prova questo:

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

[Si può fare questo come una sola riga . L'ho diviso solo per la presentazione.]

Le parentesi graffe {} sono il corpo singolo del costruttore, che in questo caso è vuoto.

+0

Grazie, ora vedo :) – dukevin

0

Gli inizializzatori sono separati da virgola e il costruttore deve avere un solo corpo.

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

Ho ottenuto 2 upvotes per una formattazione carina :) –

3

Come altri hanno sottolineato, è solo una lista di voci separate da virgole. La sintassi variable(value) è solo un modo predefinito per la costruzione di tipi di dati primari, ad esempio è possibile utilizzare questo metodo al di fuori degli elenchi di inizializzazione. Inoltre, se un membro della tua classe è anche una classe con un costruttore, lo chiameresti nello stesso modo.

Non sei solo tenuto a mettere la lista nella dichiarazione della classe, solo per riferimento futuro. Questo codice è perfettamente adatto per esempio

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 
}; 
Problemi correlati