在c ++中调用基类的ostream友元函数

时间:2012-04-28 20:28:37

标签: c++ iostream

所以,我有两个班级:

class Base {
    private:
        int number;
    public:
        friend ostream & operator<<(ostream & output, const Base &n);
}

ostream & operator<<(ostream & output, const Base &n) {
    output<<n.a<<endl;
    return output;
}

class Child : Base {
    private:
        int second;
    public:
        friend ostream & operator<<(ostream & output, const Child &n);

}

ostream & output<<(ostream & output, const Child &n) {
    output<<n.second<<Base:: ????<<endl;
    return output;
}

我的问题是,如何从子类调用基类的友元函数来输出其内容:

output<<n.second<<Base:: ????<<endl

提前致谢:)

3 个答案:

答案 0 :(得分:5)

output<<n.second<<static_cast<const Base&>(n)<<endl;

答案 1 :(得分:3)

如果你不喜欢演员:

ostream & operator<<(ostream & output, const Child &n) {
    const Base& b(n);

    output<< n.second << b << endl;
    return output;
}

顺便说一句,一般情况下,最好将std::endl放到呼叫者的流中。

答案 2 :(得分:2)

实际上......我会提出另一种方案。

没有虚拟方法的基类没什么意义,所以让我们只添加一个虚拟方法:)

class Base {
public:
  virtual void print(std::ostream& out) const { /**/ }

};

inline std::ostream& operator<<(std::ostream& out, Base const& b) {
    b.print(out); return out;
}

现在,我们在派生类中重写它:

class Derived: public Base {
public:
    virtual void print(std::ostream& out) const override {
        out << /* specific */;
        this->Base::print(out); /* base */
    }
};