2012-03-04 103 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