虚拟<<操作者

时间:2012-04-15 22:37:53

标签: c++ operator-overloading

我有一个小问题,我的<<运算符未被正确调用。

这就是我所拥有的:

class SomeInterface
{
   friend std::ostream& operator<<(std::ostream& str, const SomeInterface& data);

   protected:
      virtual void print(ostream& str) const = 0;
};

inline std::ostream& operator<< (std::ostream& o, SomeInterface const& b)
{
  b.print(o);
  return o;
}
}

调用代码如下所示:

SomeInterface* one  = new someConcrete ();
cout << one;

&lt;&lt;重载函数我希望在接口上调用不是,更不用说调度到派生类了。

2 个答案:

答案 0 :(得分:3)

尝试:

cout << *one;

您的代码要求打印指针,而operator<<需要const SomeInterface&参考。

答案 1 :(得分:0)

您正在调用std::ostream& operator<< (std::ostream& o, void*);,因为one的类型是指针。

尝试:

cout << *one; 

这将调用带有(引用)实际对象的重载,而不是指针本身