使用继承,我试图在我的基类中创建一个重载的输出操作符,该操作符在适当的派生类中调用输出函数,以根据哪种类型的对象打印正确的数据。
如何返回可以发送到重载输出操作符的输出,以便只输出cout << object << endl;
例如:
ostream & operator<< (ostream &out, const person &rhs){
out << rhs.print_data();
return out;
}
ostream student::print_data(){
ostream out;
out << data;
return out;
}
ostream faculty::print_data(){
ostream out;
out << data;
return out;
}
编辑:我想弄清楚我是否需要在打印功能中返回类型ostream
或ostream &
答案 0 :(得分:3)
Streams不能复制,所以如果你想返回(或作为参数传递),必须通过引用来完成。并且你不能返回对局部变量的引用(因为那些将超出范围而且&#34;消失&#34;)。
此外,基本的std::ostream
对象对于创建实例没有意义。
简单解决方案:将流作为参数(通过引用当然)传递给函数:
ostream& operator<< (ostream &out, const person &rhs){
return rhs.print_data(out); // No need for any output here
}
ostream& student::print_data(ostream& out){
return out << data;
}