运算符 << 抽象 类,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;
}
如果我有一个抽象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;
}