#include <iostream>
#include <string>
class Data
{
private:
int day, month, year;
public:
Data() : Data(0,0,0) {};
Data(int d, int m, int y) : day(d) , month(m), year(y) {}
void print() { std::cout << day << " " << month << " "<< year << std::endl; }
};
int main()
{
Data a;
a.print(); //ok - output: 0,0,0 and no compiler errors
}
构造函数没有返回值,并且在创建对象时调用构造函数,这意味着可以初始化数据,所以当我从另一个构造函数调用构造函数时,这是否完全有效?
我还注意到Data() { Data(0,0,0); };
NOT 初始化当前的班级数据成员。
为什么Data() : Data(0,0,0) {};
有效且Data() { Data(0,0,0); };
没有?
答案 0 :(得分:0)
执行表演是完美的做法:
Data() : Data(0,0,0) {};
您只是使用初始化程序列表进行调用。
原因
Data() {
Data(0,0,0);
}
没有用,因为你所做的只是在构造函数中的堆栈上创建了一个“匿名”Data
对象,一旦默认构造函数完成就会被破坏。