如果我有一个抽象类,让我们调用它" Vertebrate",它有一个字段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);
}
这是抽象类代码。
答案 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;
}