首页 > 解决方案 > std::ostream 类的组合

问题描述

我们有以下情况:

在 A 类和 B 类中,我们重写了<<操作符。
现在,我们有了一个新类 C,其中包含 A 和 B 对象的数据成员。
我们将如何覆盖<<这里的运算符?

更具体地说,我们需要这样的东西:
cout<<objectOfC 对应于cout<<correspondingObjectOfA<<correspondingObjectOfB

我不知道如何修改 ostream& 对象以将其返回。

ostream& operator<< (ostream& out, const C& obj){   // This is a friend function declared in C.h
    A* a = obj.AObject; // Returns the corresponding object of A
    B* b = obj.BObject; // Returns the corresponding object of B
    
    // Need to modify out somehow to 'cout' A and B respectively when cout is called on an object of C

    return out;
}

任何帮助将不胜感激。谢谢 :)

标签: c++classoopstdostream

解决方案


如果您已经对 and 进行了适当的覆盖A,请B使用它们。

ostream& operator<< (ostream& out, const C& obj) {
    out << *obj.AObject << *obj.BObject;
    return out;
}

因为operator<<返回它的ostream参数,你可以进一步压缩:

ostream& operator<< (ostream& out, const C& obj) {
    return out << *obj.AObject << *obj.BObject;
}

推荐阅读