我已经看到了这个接受输入时写(myDetails是一个结构):CIN和方法声明
cout << "Enter your weight: ";
(cin >> myDetails.weight).get();
我的问题是,我不明白。整个语句如何变成一个对象并且有一个名为get()的方法?我可以理解,cin有一个名为get()的方法,cin创建时括号是什么?
我已经看到了这个接受输入时写(myDetails是一个结构):CIN和方法声明
cout << "Enter your weight: ";
(cin >> myDetails.weight).get();
我的问题是,我不明白。整个语句如何变成一个对象并且有一个名为get()的方法?我可以理解,cin有一个名为get()的方法,cin创建时括号是什么?
运算符>>这里只会返回对std :: cin的引用,所以就是你调用get()。括号是必需的,这样你就不会试图在myDetails.weight上调用get()。
更一般地,流萃取运营商通常有签名是这样的:
std::istream& operator>>(std::istream& is, thing& rhs);
他们然后返回自己的第一个参数,以支持链接。这与>>是左结合的事实相结合,可以让你编写例如
std::cin >> a >> b;
即相当于:
operator>>(operator>>(std::cin, a), b);
非常感谢您的解释 – Dan 2012-03-04 18:14:15
整个语句怎样才能成为像一个对象,并有一个方法名为get()?
因为它不只是一个声明;这是一个表达。重载operator>>
为istream
返回istream&
,这意味着表达cin >> x
,无论是单独或作为更广泛全表达的一部分使用时,将计算为一个istream&
(具体地,到cin
本身的引用)。
那怎么链接的作品:cin >> x >> y
是一样的(cin >> x) >> y
,所以你可以看到,这只能在(cin >> x)
计算结果为cin
;你的例子也是一样的,你所调用的成员.get()
而不是成员operator>>
。
ahhh,谢谢你清理那个。现在一切都有意义。 – Dan 2012-03-04 18:13:57
请不要在你的帖子上签名。 – 2012-03-04 18:07:28
好的,谢谢你让我知道。只是添加一些个人信息的消息。 – Dan 2012-03-04 18:10:45
时间和地点:) – 2012-03-04 18:17:35