Return 派生类型 ostream class

Return type ostream for derived class

通过继承,我正在尝试在我的基础 class 中创建一个重载输出运算符,它在正确的派生 class 中调用输出函数以根据哪种类型打印正确的数据对象。

如何 return 可以发送到重载输出运算符的输出,以便您可以仅使用 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;
}

编辑:我想弄清楚是否需要 return 在打印函数中输入 ostreamostream &

流不能复制,所以如果你想return(或作为参数传递)必须通过引用来完成。而且你不能 return 对局部变量的引用(因为它们会超出范围并且 "disappear")。

此外,基本的 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;
}