运算符<<在抽象类中,c ++

时间:2016-12-31 15:17:38

标签: c++ polymorphism abstract-class stream-operators

如果我有一个抽象类,让我们调用它&#34; Vertebrate&#34;,它有一个字段std::string name;并且它有一个纯虚方法 virtual void print(std::ostream&) const noexcept = 0;将在子类中重写并在operator<<中调用。

我了解多态如何工作,以及如何在继承的类中实现operator<<

我没有得到:

我不明白:如何在使用虚拟打印功能的抽象类中实现operator<<。为什么这段代码不起作用?我的抽象类需要operator<<

virtual void print(std::ostream&) const noexcept = 0;
std::ostream & operator<<(std::ostream & str, Member &obj)
{
    return obj.print(str);
}

这是抽象类代码。

1 个答案:

答案 0 :(得分:2)

您正在尝试返回print void的结果,但operator<<应返回std::ostream

以下内容应该有效:

class Vertebrate
{
    // ...
    virtual void print(std::ostream&) const noexcept = 0;
};

std::ostream& operator<<(std::ostream& stream, Vertebrate& obj)
{
    obj.print(stream);
    return stream;
}