我已經看到了這個接受輸入時寫(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