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 已传递给它的相同输入流。
cout
和cin
通过<iostream>
istream
和ostream
的childclass相互联系.现在我们要将运算符重载为全局函数,因为作为成员重载时,运算符必须是左侧 object 的成员。此外,为了实现通用流的功能,我们必须传递引用而不是值。所以我们必须选择用友元函数重载它们。
因此:
istream & operator>>(istream &din,vector &vtemp)
现在 din
的工作方式与 cin
类似,因为 din
引用了 cin
。现在使用 din
我们扫描 object 的 data-members。扫描后我们必须将它们链接起来(流)。所以引用必须返回到cin
.
程序的目的是获取输入,将这些值分配给 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 shouldistream
be returned back?
这样做是为了"chaining"。
运算符从>>
的两边取其两个参数。流来自左边,变量来自右边。当你这样做时
cin >> x >> y;
第一个表达式cin >> x
在第二个表达式的左边,这意味着cin >> x
的结果成为... >> y
的输入流。这就是为什么运算符需要 return 已传递给它的相同输入流。
cout
和cin
通过<iostream>
istream
和ostream
的childclass相互联系.现在我们要将运算符重载为全局函数,因为作为成员重载时,运算符必须是左侧 object 的成员。此外,为了实现通用流的功能,我们必须传递引用而不是值。所以我们必须选择用友元函数重载它们。
因此:
istream & operator>>(istream &din,vector &vtemp)
现在 din
的工作方式与 cin
类似,因为 din
引用了 cin
。现在使用 din
我们扫描 object 的 data-members。扫描后我们必须将它们链接起来(流)。所以引用必须返回到cin
.