我正在学习如何初始化列表。
我下面有一个简单的类,并试图初始化变量列表。第一个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;
};
显然我没有太多的线索如何做到这一点,任何指导将不胜感激,谢谢
试试这个:
Month(char first, char second, char third)
: first(first), second(second), third(third) {}
[你可以把它写成一行。我把它分开只是为了表示。
空大括号{}是构造函数的单一主体,在本例中为空。
Month(char first, char second, char third)
: first(first)
, second(second)
, third(third)
{} //DOES WORK :)
正如其他人指出的那样,它只是一个逗号分隔的项目列表。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
};
初始化式是逗号分隔的,构造函数应该只有一个主体。