下面的代码展示了如何重载枚举类型的<<
操作符。
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
对象被输入的地方……右边只有一样东西
谢谢。
ostream& operator<< (ostream& out, days d)
函数不打算在代码中直接调用。相反,通过定义该函数,您是在告诉编译器"这里有一个实现<<
运算符的函数,用于将days
对象传递给ostream
对象。"然后,每当您执行类似cout << aDay << endl;
的操作时,编译器都会隐式地生成对operator<<
函数的调用。cout
对象是ostream
的一个实例(或其子类)。
别忘了你总是可以使用括号-> cout << +aDay << endl
-> (cout << +aDay) << endl
。
编译器会像Mike Hots说的那样,查找与std::ostream, days
参数匹配的操作符重载。