所以,我有两个班级:
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
提前致谢:)
答案 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 */
}
};