下面的代码显示了如何为枚举类型重载<<
运算符。 (摘自here)。
days operator+ (days d)
{
return static_cast<days>((static_cast<int>(d) + 1) % 7);
}
ostream& operator<< (ostream& out, days d)
{
switch(d)
{
case SUNDAY: out << "SUNDAY";
break;
case MONDAY: out << "MONDAY";
break;
case TUESDAY: out << "TUESDAY";
break;
case WEDNESDAY: out << "WEDNESDAY";
break;
case THURSDAY: out << "THURSDAY";
break;
case FRIDAY: out << "FRIDAY";
break;
case SATURDAY: out << "SATURDAY";
break;
}
return out;
}
上述代码表面上可以按以下方式使用:
int main()
{
days aDay = SUNDAY;
cout << +aDay << endl;
return 0;
}
很明显,这里的意图是重载<<
运算符,以便在枚举类型days
上使用。最后,我们将其用作:cout << aDay << endl;
我不明白,我们输入out
流的方式/位置。我可以理解,day
对象正在输入<<
,因为它位于右侧,但我看不到out
对象的输入位置...只有右边有一件事......
谢谢。
答案 0 :(得分:1)
ostream& operator<< (ostream& out, days d)
函数不应由您在代码中直接调用。相反,通过定义该函数,您告诉编译器“这是一个实现<<
运算符的函数,用于将days
对象传递给ostream
对象。”然后,只要执行operator<<
之类的操作,编译器就会隐式生成对cout << aDay << endl;
函数的调用。 cout
对象是 ostream
(或其子类)的实例。
答案 1 :(得分:1)
别忘了你总是可以使用括号 - &gt; cout << +aDay << endl
- &gt; (cout << +aDay) << endl
。
编译器完成了剩下的工作,即查找匹配std::ostream, days
参数的运算符重载,如Mike Hots所说。