You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为含A、B对象成员的C类重载std::ostream的<<运算符?

解决类C的ostream重载问题

嗨,别担心,这个问题其实很好解决!既然你已经为类A和类B实现了operator<<的重载,那在类C的友元重载函数里,只需要把A、B的对象依次输出到传入的ostream对象中,最后返回这个对象就可以实现你想要的效果啦。

修改后的代码如下:

ostream& operator<< (ostream& out, const C& obj){ 
    // 解引用指针,获取A和B的对象实例
    A* a = obj.AObject; 
    B* b = obj.BObject; 
    // 直接复用A和B已有的<<重载,链式输出到同一个ostream对象
    out << *a << *b;
    // 返回ostream对象,支持链式输出(比如cout << c1 << c2)
    return out; 
}

关键细节说明:

  • 因为a和b是指针类型,必须用*a和*b解引用得到实际对象,不然输出的会是指针的内存地址,而非对象的内容。
  • 链式调用out << *a << *b的本质是:先执行out << *a,返回的还是原来的out对象,接着再执行out << *b,这样就把A和B的内容依次写入到同一个输出流中了。
  • 最后返回out是为了保持operator<<的标准行为,支持连续的输出操作(比如cout << cObj1 << " " << cObj2;这种写法)。

内容的提问来源于stack exchange,提问作者vijayJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 17:47:35