神厨小福贵! 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 帮我调试idea基于spring boot项目
  • ¥15 es 7.17.20版本生成时间戳
  • ¥15 wpf dategrid表头排序图标自定义
  • ¥15 分析下图所示同步时序逻辑电路的逻辑功能。
  • ¥15 halcon联合c#遇到了问题不能解决
  • ¥15 xshell无法连接提示ssh服务器拒绝密码
  • ¥15 AT89C52单片机C语言关于串口通信的位操作
  • ¥20 需要步骤截图(标签-服务器|关键词-map)
  • ¥50 gki vendor hook
  • ¥15 灰狼算法和蚁群算法如何结合