Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 流运算符重载中的返回类型_C++_Inputstream - Fatal编程技术网

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

C++ 流运算符重载中的返回类型,c++,inputstream,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, MyClas

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

#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;
}
#包括
使用名称空间std;
类MyClass{
int x,y;
公众:
MyClass(inti,intj){
x=i;
y=j;
}
friend ostream&operator(istream&stream,MyClass&ob);
//friend void运算符(istream和stream、MyClass和ob);
};
ostream&运营商ob.y;
回流;
}
int main()
{
MyClass abt(30,23);
cin>>abt;

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

stream >> ob.x >> ob.y;
这与:

(stream >> ob.x) >> ob.y;
那么
stream>>ob.x
的值是多少呢

“返回值的目的是什么?”

其目的是,这些操作可以链接到如下语句中

MyClass abt(30,23);
int y;

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

cin >> abt >> y;
        // ^^^^
MyClass-abt(30,23);
int-y;
cout abt>>y;
// ^^^^
在本例中,如果数据取自输入流
cin
,并且在函数内部分配了值,为什么要返回
istream

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

运算符从
>
两侧获取其两个参数。流来自左侧,变量来自右侧。执行此操作时

cin >> x >> y;

第一个表达式
cin>>x
位于第二个表达式的左侧,这意味着
cin>>x
的结果成为
..>>y
的输入流。这就是为什么操作员需要返回已传递到其中的相同输入流。

cout
cin
彼此链接r到
istream
ostream
的子类。现在,我们将要重载操作符作为全局函数,因为重载作为成员,操作符必须是左侧对象的成员。同样,要实现泛型流的函数,我们必须传递引用,而不是值.因此,我们必须选择使用friend函数重载它们。 因此:

现在
din
的工作原理与
cin
类似,因为
din
引用了
cin
。现在使用
din
我们扫描对象的数据成员。扫描后我们必须链接它们(流)。因此引用必须返回到
cin

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