为我的班级重载流操作符<< >>的正确方法是什么?

gha*_*lio 5 c++ operator-overloading stream-operators

我对如何在C++中为我的类重载流操作符感到困惑,因为它似乎是流类上的函数,而不是我的类.这样做的正常方法是什么?目前,对于"来自"运营商,我有一个定义

istream& operator>>(istream& is, Thing& thing) { // etc...
Run Code Online (Sandbox Code Playgroud)

哪个有效.在Thing类的定义中没有提到它.我希望它能够在其实现中访问我的Thing类的成员 - 我该怎么做?

vla*_*adr 9

你的实施很好.您需要执行的唯一额外步骤是声明你的运营商为friendThing:

class Thing {
public:
  friend istream& operator>>(istream&, Thing&);
  ...
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*ers 8

其他答案是对的.万一它对你有所帮助,这里是一个代码示例(来源):

class MyClass {
  int x, y;
public:
  MyClass(int i, int j) { 
     x = i; 
     y = j; 
  }
  friend ostream &operator<<(ostream &stream, MyClass ob);
  friend istream &operator>>(istream &stream, MyClass &ob);
};

ostream &operator<<(ostream &stream, MyClass ob)
{
  stream << ob.x << ' ' << ob.y << '\n';

  return stream;
}

istream &operator>>(istream &stream, MyClass &ob)
{
  stream >> ob.x >> ob.y;

  return stream;
}
Run Code Online (Sandbox Code Playgroud)

  • 我将operator <<定义如下:ostream&operator <<(ostream&stream,const MyClass&ob); (2认同)

Dav*_*ler 6

你让你operator>>成为Thing课程的朋友.