返回类型ostream用于派生类

时间:2018-04-30 06:22:48

标签: c++ inheritance operators ostream

使用继承,我试图在我的基类中创建一个重载的输出操作符,该操作符在适当的派生类中调用输出函数,以根据哪种类型的对象打印正确的数据。

如何返回可以发送到重载输出操作符的输出,以便只输出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;
}

编辑:我想弄清楚我是否需​​要在打印功能中返回类型ostreamostream &

1 个答案:

答案 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;
}