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

Operator << in abstract classes, c++

如果我有一个抽象class,我们称它为"Vertebrate",它有一个字段std::string name;,它有一个纯虚方法 virtual void print(std::ostream&) const noexcept = 0; 将在子 classes 中覆盖并在 operator<< 中调用。

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

我不明白的是:

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

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

那是摘要class代码。

您正在尝试 return print 的结果 void,但是 operator<< 应该 return 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;
}