运算符重载: 输入和输出运算符
2024年1月1日 2024年1月1日
- 必须为非成员函数: 左操作数为iostream对象, 右操作数才是类对象
- 通常是友元: 访问类的非公有
public
数据成员 - 返回iostream对象的引用
重载输入运算符
>>
- 检查输入是否成功
- 处理失败的情况
如果读取过程中发生错误, 输入运算符应该负责从错误中恢复
1istream &operator>>(istream &is, T &var) 2{ 3 // 读取流 4 if (is) // 输入成功 5 { 6 // process 7 } 8 else // 默认初始化对象 9 { 10 var = T(); 11 } 12 return is; 13}
重载输出运算符
<<
- 只负责输出对象的内容
- 尽量减少格式化操作,使用户有权控制输出的细节
建议不包含末尾换行, 由用户控制格式
1ostream &operator<<(ostream &os, const T &var) 2{ 3 // 输出流 4 return os; 5}