6

所以,我有两个课程:

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

提前致谢 :)

4

3 回答 3

5
output<<n.second<<static_cast<const Base&>(n)<<endl;
于 2012-04-28T20:36:46.360 回答
3

如果你不喜欢铸造:

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

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

顺便说一句,一般来说,最好将std::endl流式传输给调用者。

于 2012-04-28T20:40:52.467 回答
3

实际上......我会提出一个替代方案。

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

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 */
    }
};
于 2012-04-28T20:49:02.440 回答