如何为含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
相关产品推荐
相关产品推荐

