看到下面的代码片段,我有问题要理解它是如何工作的。C++ - 为什么我可以返回一个int类的月
class Month {
public:
static const Month Jan() { return 1; }
...
static const Month Dec() { return 12; }
int asInt() const { return monthNumber; }
private:
Month(int number) : monthNumber(number) {}
const int monthNumber;
}
该类是这样设计的,以便用户不会得到无效的月份值。
下面是问题: 为什么静态函数Jan可以返回1,返回值为Month?
谢谢
基础上的评论,这个类可以设计如下:
class Month {
public:
static const Month Jan() { return Month(1); }
...
static const Month Dec() { return Month(12); }
int asInt() const { return monthNumber; }
private:
explicit Month(int number) : monthNumber(number) {}
const int monthNumber;
};
你好Didier,所以你的观点是,如果我没有一个构造函数Month(int number),那么我将有问题让编译器执行implict转换。那是对的吗? - 谢谢 – q0987 2010-10-26 21:05:56
'Month(int number)'构造函数也可以被设置为'explicit'。一般来说,最好用一个变量标记所有ctors为“explicit”(除了copy ctor)。 – fbrereto 2010-10-26 21:06:54
是的,这是正确的。如果没有这个构造函数,编译器将不知道如何将'int'转换为'Month'。 – 2010-10-26 21:07:07