c++ - 派生类的返回类型 ostream

标签 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 &在打印函数中

最佳答案

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

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

关于c++ - 派生类的返回类型 ostream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50094977/

相关文章:

c++ - 如何找到最小第一个索引的 vector<vector<int>> 的所有索引

javascript - Object.create 多个原型(prototype)

继承类上的 C# 单例模式

javascript - 访问属性的性能 - 工厂函数 vs. 串联继承 vs. 类

c++ - operator = 在不同维度的 vector 上

python - 用于测量 Python 差异的运算符

c++ - 非确定性操作的设计模式(nondet.factory?)

C++ 错误 : "No match for call to"

c++ - Win1251->UTF16转换

c - 难以理解指针操作