神厨小福贵! 2022-02-11 21:27 采纳率: 100%
浏览 24
已结题

C++中<<运算符重载中的问题

ostream & operator<<(ostream &out) const
{
    if(str != NULL)
    {
          out << str;
    }
    return out;
}

上述代码中最后为啥要return out这个操作
而且假设现在有一个对象S
S << cout和cout << S这俩玩意一样不 这个C++这块好难理解啊

  • 写回答

4条回答 默认 最新

  • S13161 2022-02-12 10:42
    关注

    不是一样的。那个operator重载的第一个参数就是ostream对象。
    就像:

    ostream& operator(ostream& os, ClassA a){
      //………………
      return os;
    }
    

    如果使用以下代码:

    ClassA cla;
    cout << cla; //等价于operator<<(cout,cla);
    

    那么传入operator<<的参数中,os是cout,a就是cla。
    至于你写到运算符只有一个参数,然而<<是二元运算符,所以你这个应该定义在类里。
    而且如果定义在类里,就要将对象放在运算符前面,而且cout没有定义那种运算符。
    就像:

    class S{
    public:
      std::ostream& operator<<(std::ostream& os){ //标记:1
        //insert your code
        return os;
      }
    };
    
    std::ostream& operator<<(std::ostream& os,S s){ //标记:2
      //insert your code
      return os;
    }
    int main(){
      using namespace std;
      S s;
      cout << s; //调用2
      s << cout; //调用1
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 2月20日
  • 已采纳回答 2月12日
  • 创建了问题 2月11日

悬赏问题

  • ¥15 对于知识的学以致用的解释
  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败