0

如果我有一个抽象类,我们称它为“脊椎动物”,它有一个字段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);
}

那是抽象类代码。

4

1 回答 1

2

您试图返回的结果printvoid,但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;
}
于 2016-12-31T15:23:33.547 回答