2011-09-29 27 views
6

我在學習如何初始化列表。多個變量的C++初始化列表

我有一個簡單的類,下面試圖初始化變量列表。第一個Month(int m): month(m)的作品。我試圖在多行變量的下面做類似的事情。這是可能的格式嗎?我是否必須擺脫這一班輪?

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

很顯然,我沒有太多的線索如何做到這一點呢,任何指導,將不勝感激,謝謝

+2

你使用什麼樣的教學材料,你被這些東西弄糊塗了?拿起一本關於C++的好書,這應該是相當直接的... –

+0

教我自己,看看它現在是幾天 – dukevin

+0

值得注意的是,初始化列表的初始化順序是變量在您的類而不是它們在列表中聲明的順序。 –

回答

9

試試這個:

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

[你可以做到這一點作爲一個單行。我只是爲了演示而拆分它。]

空的大括號{}是構造函數的單個主體,在這種情況下是空的。

+0

謝謝,我現在看到:) – dukevin

0

初始值設定項以逗號分隔,而您的構造函數應該只有一個主體。

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

我有2 upvotes的格式很漂亮:) –

3

正如其他人指出的那樣,它只是一個逗號分隔的項目列表。 variable(value)語法只是構建基本數據類型的默認方式,例如,您可以在初始化列表之外使用此方法。另外,如果你的類的一個成員也是一個帶有構造函數的類,你可以用完全相同的方式調用它。

您不僅要將該列表放入該類的聲明中,以供將來參考。這個代碼是非常好的例如

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