12

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

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

4 回答 4

16

尝试这个:

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

[您可以将其作为一行来执行。我把它分开只是为了展示。]

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

于 2011-09-29T22:17:20.030 回答
5
Month(char first, char second, char third) 
      : first(first)
      , second(second)
      , third(third)
{} //DOES WORK :)
于 2011-09-29T22:18:22.650 回答
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
};
于 2011-09-29T22:36:17.523 回答
1

初始化器是逗号分隔的,你的构造器应该只有一个主体。

于 2011-09-29T22:17:24.037 回答