我有一个基本的抽象类Base。
class Base
{
protected:
string m_Name;
public:
virtual string Name() { return m_Name; }
virtual string Type() = 0;
virtual bool isEqual(Base* rhs) = 0 ;
//virtual ostream& operator<< (ostream& out) const;
};
我想重载operator <<
以显示从Base
继承的对象。
我无法使用void print()
函数,因为从Base
继承的这些对象也有一些只能由operator <<
显示的对象。
如何重载operator <<
?
答案 0 :(得分:5)
一种常见的模式是提供虚拟print
方法,并在ostream&<<
运算符中使用该方法:
class Base
{
public:
void print(std::ostream& o) const { /* do your stuff */ }
virtual ~Base() {}
};
std::ostream& operator<<(std::ostream& o, const Base& b)
{
b.print(o);
return o;
}
这个想法是每个派生类型根据需要实现print(ostream&)
。