考虑以下代码,重载插入&提取算子。
#include <iostream>
using namespace std;
class CTest
{
string d_name;
public:
friend ostream & operator<<(ostream & out, CTest & test);
friend istream & operator>>(istream & in, CTest & test);
};
ostream & operator<<(ostream & out, CTest & test)
{
out << "Name: " << test.d_name;
return out;
}
istream & operator>>(istream & in, CTest & test)
{
cout << "Enter your name: ";
string name;
if(in >> name)
test.d_name = name;
return in;
}
int main()
{
CTest test;
cin >> test; // (1)
cout << test; // (2)
}
关于这个问题,论证ostream&amp; amp;的重要性是什么? out and istream&amp;在? 由于我们只能看到一个参数(cin&gt;&gt; test或cout&lt;&lt; test),调用者中的哪个是在(1)或(2)传递的ostream / istream引用?
答案 0 :(得分:2)
因为在cin >> test
和cout << test
中都存在两个参数。
cin
的类型为istream
。
cout
的类型为ostream
。
这些类型可能是除cout
和cin
之外的其他内容。例如,它们可以是cerr
,clog
或stringstream
。
这就是为什么你需要两个参数,因为一个是流的变量而另一个是要流式传输的对象。
答案 1 :(得分:0)
cin >> test;
此处,左操作数是cin
类型的std::istream
对象,右操作数是您的CTest
类对象。
>>
运算符的原型
friend istream& operator >> (istream& s, Your class &);
所以,在内部我们已经传递了两个参数。
答案 2 :(得分:0)
为了更好地理解两个参数的来源,您可以按如下方式重写main()函数:
int main()
{
CTest test;
operator>>(std::cin, test);
operator<<(std::cout, test);
}