【发布时间】:2017-08-17 02:49:08
【问题描述】:
这里我定义一个Date,并指定一个用户定义的转换。
class Date {
private:
int day;
int month;
string dateStr;
public:
Date(int _day, int _month) : day(_day), month(_month) {}
operator const string() {
ostringstream formattedDate;
formattedDate << month << "/" << day;
dateStr = formattedDate.str();
return dateStr;
}
};
转换为string时效果很好。
Date d(1, 1);
string s = d;
但是为什么不能直接和cout一起使用呢?
cout << d << endl; // The compiler complains that there is no suitable type marching << operator
但是,如果我使用char* 而不是string 进行用户定义的转换,我可以直接与cout 一起使用。为什么?
operator const char*() {
ostringstream formattedDate;
formattedDate << month << " / " << day;
dateStr = formattedDate.str();
return dateStr.c_str();
}
ps。我知道直接重载<< 可以很好地输出。但我的问题是:为什么不能将<< 与用户定义的转换一起使用到std::string?
【问题讨论】:
-
什么“错误”你得到了?构建错误?崩溃?出乎意料的输出?如果可能,请复制粘贴(作为文本)。
-
另外,如果你想输出你的对象,我宁愿建议你重载全局
operator<<函数,而不是依赖转换运算符。 (如果你还想拥有一个转换运算符,你可以使用重载的<<运算符来创建它。)
标签: c++ type-conversion operator-overloading implicit-conversion cout