2011-09-29 13 views
6

Próbuję nauczyć się inicjować listy.Listy inicjujące C++ dla wielu zmiennych

Mam prostą klasę poniżej i próbuję zainicjować listę zmiennych. Działa pierwszy Month(int m): month(m). Próbuję zrobić coś podobnego poniżej tej linii z więcej niż jedną zmienną. Czy to możliwe w tym formacie? czy musiałbym oderwać się od jednego liniowca?

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

Oczywiście nie mam dużo pojęcia jak to zrobić, wszelkie wskazówki będą mile widziane, dzięki

+2

Jakiego rodzaju materiału nauczania używasz, abyś był zdezorientowany przez te rzeczy? Podnieś przyzwoitą książkę o C++, a to powinno być dość proste ... –

+0

Nauczenie się, jak to jest teraz-dni – dukevin

+0

Warto zauważyć, że listy inicjalizacyjne są inicjowane w kolejności, w której zmienne są zadeklarowane w twoim klasa, a nie kolejność, którą są zadeklarowane na samej liście. –

Odpowiedz

9

Spróbuj tego:

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

[Można to zrobić w jednej linii . Podzielam go tylko na prezentację.]

Puste nawiasy klamrowe {} są pojedynczą bryłą konstruktora, która w tym przypadku jest pusta.

+0

Dzięki, widzę teraz :) – dukevin

0

Inicjatory są rozdzielane przecinkami, a Twój konstruktor powinien mieć tylko jedno ciało.

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

Mam 2 upvotes za ładne formatowanie :) –

3

Jak podkreślali inni, jest to po prostu oddzielona przecinkiem lista przedmiotów. Składnia variable(value) jest po prostu domyślnym sposobem konstruowania podstawowych typów danych, możesz użyć tej metody na przykład poza listami inicjalizacyjnymi. Ponadto, jeśli członek twojej klasy jest również klasą z konstruktorem, nazwałbyś to w dokładnie taki sam sposób.

Jesteś zobowiązany nie tylko do umieszczenia listy w deklaracji klasy, tylko na przyszłość. Ten kod jest całkowicie w porządku, na przykład:

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 
}; 
Powiązane problemy