return 输入流运算符重载

return type in stream operator overloading

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

#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;
}

在示例中,如果数据取自输入流 'cin' 并且值是在函数内部分配的,为什么 'istream' 应该被 return 回传。我看过所有教程 return stream in operator overloading function。 return 值的用途是什么?

你认为下面的方法如何工作?

stream >> ob.x >> ob.y;

这完全一样:

(stream >> ob.x) >> ob.y;

那么stream >> ob.x的价值是多少?

"What is the purpose of return value?"

这样做的目的是,这些操作可以链接在像

这样的语句中
MyClass abt(30,23);
int y;

cout << abt << endl;
         // ^^^^^^^

cin >> abt >> y;
        // ^^^^

In the example, if data is taken from input stream cin and the values are assigned inside the function, why should istream be returned back?

这样做是为了"chaining"。

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

cin >> x >> y;

第一个表达式cin >> x在第二个表达式的左边,这意味着cin >> x的结果成为... >> y的输入流。这就是为什么运算符需要 return 已传递给它的相同输入流。

coutcin通过<iostream>istreamostream的childclass相互联系.现在我们要将运算符重载为全局函数,因为作为成员重载时,运算符必须是左侧 object 的成员。此外,为了实现通用流的功能,我们必须传递引用而不是值。所以我们必须选择用友元函数重载它们。 因此:

istream & operator>>(istream &din,vector &vtemp)

现在 din 的工作方式与 cin 类似,因为 din 引用了 cin。现在使用 din 我们扫描 object 的 data-members。扫描后我们必须将它们链接起来(流)。所以引用必须返回到cin.