如何根据已定义的方法显示重载 << 运算符?

How to overload the << operator based on a method display already defined?

我想从已定义的方法显示中为我的 class 重载 << 运算符。我收到一个编译器错误,不匹配运算符 <<。

这是一个最小的例子:

#include <iostream>

using namespace std;

class MyClass
{
public:

  MyClass()
  {}

  ostream& display(ostream& out) const
  {
    out << "Display message" << endl;
    return out;
  }

  ostream& operator<< (ostream& out) const
  {
    ostream& output = display(out);
    return output;
  } 
};

int main()
{
  MyClass C1;
  cout << C1 << endl; 

  return 0;
}

虽然 C1.display(cout); 没有问题!

您已将 operator<< 定义为 MyClass 成员函数 。因此,必须像调用成员函数一样调用它(左边是对象,右边是参数),像这样:

C1 << cout;

但这似乎不是你想要的。您可能希望能够这样称呼它:

cout << C1;

在那种情况下,函数不能是 MyClass 的成员。它必须是 cout 一个 自由函数 的成员(在任何 class 之外)。在这种情况下,它 必须 是一个自由函数,因为您不能更改 cout.

的定义

因此,要将 operator<< 声明为自由函数,它需要有两个参数(左侧和右侧):

ostream& operator<< (ostream& out, const MyClass& c) { ... }

现在你可以用左边的 ostream 和右边的 MyClass 对象来调用它,像这样:

cout << C1;