2012-03-04 106 views
2

我已经看到了这个接受输入时写(myDetails是一个结构):CIN和方法声明

cout << "Enter your weight: "; 
(cin >> myDetails.weight).get(); 

我的问题是,我不明白。整个语句如何变成一个对象并且有一个名为get()的方法?我可以理解,cin有一个名为get()的方法,cin创建时括号是什么?

+0

请不要在你的帖子上签名。 – 2012-03-04 18:07:28

+0

好的,谢谢你让我知道。只是添加一些个人信息的消息。 – Dan 2012-03-04 18:10:45

+0

时间和地点:) – 2012-03-04 18:17:35

回答

6

运算符>>这里只会返回对std :: cin的引用,所以就是你调用get()。括号是必需的,这样你就不会试图在myDetails.weight上调用get()。

更一般地,流萃取运营商通常有签名是这样的:

std::istream& operator>>(std::istream& is, thing& rhs); 

他们然后返回自己的第一个参数,以支持链接。这与>>是左结合的事实相结合,可以让你编写例如

std::cin >> a >> b; 

即相当于:

operator>>(operator>>(std::cin, a), b); 
+1

非常感谢您的解释 – Dan 2012-03-04 18:14:15

1

整个语句怎样才能成为像一个对象,并有一个方法名为get()?

因为它不只是一个声明;这是一个表达。重载operator>>istream返回istream&,这意味着表达cin >> x,无论是单独或作为更广泛全表达的一部分使用时,将计算为一个istream&(具体地,到cin本身的引用)。

那怎么链接的作品:cin >> x >> y是一样的(cin >> x) >> y,所以你可以看到,这只能在(cin >> x)计算结果为cin;你的例子也是一样的,你所调用的成员.get()而不是成员operator>>

+0

ahhh,谢谢你清理那个。现在一切都有意义。 – Dan 2012-03-04 18:13:57