抽象类重载ostream运算符

时间:2014-04-29 22:07:28

标签: c++ overloading virtual abstract ostream

我有一个基本的抽象类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 <<

1 个答案:

答案 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&)