这个重载的运算符"Where"接受"out"?
"Where" is this overloaded operator taking in "out"?
下面的代码展示了如何重载枚举类型的<<
操作符。
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
参数匹配的操作符重载。
相关文章:
- 在C++中,我如何接受不同于同一行的用户输入
- C++typeid模板值转换为联合不可接受的转换
- 当对话框被接受时,如何用参数调用槽
- 将带有派生模板的对象传递给接受具有基本模板的对象的功能
- C++线程中,没有重载函数接受 X 参数
- 为什么线程不接受此输入?
- 错误 C2679:二进制"<<":未找到采用类型 'std::string_view' 的右侧操作数的运算符(或者没有可接受的转换)
- 初始值设定项列表是否只接受使用相同类型的值初始化变量?
- 如何接受 [ENTER] 键作为无效输入并发送错误消息
- 是否所有C++运算符都接受操作数?
- 使用 cin 时接受小数点后的 2 位数字
- 函数不接受 X 参数,函数使用默认参数
- 如何确保接受的C++模板类型使运算符重载?
- C++ boost::asio::ip::tcp::acceptor 有时不接受连接器?
- 如何在 c++ 中定义接受不同参数类型的函数向量?
- 如何强制 Thrift 仅接受来自本地主机的连接
- 这种方式是否可以接受向向量添加unique_ptr?
- 为什么我的 HWID 锁接受任何acceptedSerial_2值
- C2678 二进制 '==':未找到采用 'Card' 类型左操作数的运算符(或者没有可接受的转换)
- 这个重载的运算符"Where"接受"out"?