虚拟<<操作员

Virtual << operator

本文关键字:lt 操作员 虚拟      更新时间:2023-10-16

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

这是我所拥有的:

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;

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

尝试:

cout << *one;
您的

代码要求打印指针,而您的operator<<则采用const SomeInterface&引用。

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

尝试:

cout << *one; 
这将调用重载,

该重载采用(引用)实际对象,而不是指针本身