六一的部落格


关关难过关关过,前路漫漫亦灿灿。



  1. 必须为非成员函数: 左操作数为iostream对象, 右操作数才是类对象
  2. 通常是友元: 访问类的非公有 public 数据成员
  3. 返回iostream对象的引用

重载输入运算符

>>

  1. 检查输入是否成功
  2. 处理失败的情况

    如果读取过程中发生错误, 输入运算符应该负责从错误中恢复
 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}

重载输出运算符

<<

  1. 只负责输出对象的内容
  2. 尽量减少格式化操作,使用户有权控制输出的细节

    建议不包含末尾换行, 由用户控制格式
1ostream &operator<<(ostream &os, const T &var)
2{
3    // 输出流
4    return os;
5}

运算符重载: 输入和输出运算符


  1. 必须为非成员函数: 左操作数为iostream对象, 右操作数才是类对象
  2. 通常是友元: 访问类的非公有 public 数据成员
  3. 返回iostream对象的引用

重载输入运算符

>>

  1. 检查输入是否成功
  2. 处理失败的情况

    如果读取过程中发生错误, 输入运算符应该负责从错误中恢复
 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}

重载输出运算符

<<

  1. 只负责输出对象的内容
  2. 尽量减少格式化操作,使用户有权控制输出的细节

    建议不包含末尾换行, 由用户控制格式
1ostream &operator<<(ostream &os, const T &var)
2{
3    // 输出流
4    return os;
5}