多个变量的C ++初始化列表

时间:2011-09-29 22:15:41

标签: c++ class initialization-list

我正在尝试学习如何初始化列表。

我在下面有一个简单的类,并尝试初始化变量列表。第一个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;
};

显然我没有太多线索如何做到这一点,任何指导都将不胜感激,谢谢

4 个答案:

答案 0 :(得分:10)

试试这个:

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

[您可以将此作为单行执行。我把它分开只是为了演示。]

空括号{}是构造函数的单个主体,在本例中为空。

答案 1 :(得分:5)

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

答案 2 :(得分: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
};

答案 3 :(得分:1)

初始值设定项以逗号分隔,您的构造函数应该只有一个主体。