流运算符重载中的返回类型

use*_*361 3 c++ inputstream

程序的目的是获取输入,将这些值分配给类的成员并显示输出,输入和输出操作是通过重载流运算符来完成的。

#include <iostream>
using namespace std;
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);
 // friend void operator<<(ostream &stream, MyClass ob);
 // friend void 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;
}

int main()
{
MyClass abt(30,23);
cin>>abt;
cout<<abt;
return 0;
}
Run Code Online (Sandbox Code Playgroud)

在示例中,如果数据是从输入流 'cin' 中获取的,并且值是在函数内部分配的,那么为什么要返回 'istream'。我已经看到所有教程都在运算符重载函数中返回流。返回值的目的是什么?

das*_*ght 5

在示例中,如果从输入流中获取数据cin并且在函数内部分配值,为什么要istream返回?

这样做是为了允许“链接”。

运算符从 的两侧获取它的两个参数>>。流来自左侧,变量来自右侧。当你这样做时

cin >> x >> y;
Run Code Online (Sandbox Code Playgroud)

第一个表达式cin >> x在第二个表达式的左边,这意味着结果cin >> x变成了... >> y的输入流。这就是为什么操作符需要返回已经传入它的相同输入流。