2012-03-04 4 views
2

Я видел это написано при приеме ввода (myDetails является структурой):Cin и метод заявление

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

моя проблема заключается в том, что я не понимаю. Как весь оператор может стать как объект и иметь метод get() ?. Я могу понять, что у cin есть метод под названием get(), каковы скобки вокруг создания cin?

+0

Пожалуйста, не подписывайте свои сообщения. –

+0

ok, спасибо, что сообщили мне. Был просто добавлен личный контакт к сообщению. – Dan

+0

время и место :) –

ответ

6

Оператор >> здесь просто вернется ссылка на std :: cin, так что это то, что вы вызываете get(). Скобки необходимы, чтобы вы не пытались вызвать get() на myDetails.weight.

В целом, операторы извлечения потока обычно имеют подписи, как это:

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

Затем они возвращают свой первый аргумент для того, чтобы поддерживать цепочки. Это, в сочетании с тем, что >> лево-ассоциативный, позволяет вам писать, например.

std::cin >> a >> b; 

Что эквивалентно:

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

Большое спасибо за объяснение – Dan

1

Как целое заявление стало как объект и есть метод, называемый GET()?

Потому что это не просто заявление; это выражение. Перегружена operator>> для istream возвращается istream&, а это означает, что выражение cin >> x, является ли использоваться самостоятельно или как часть более широкой полного выражения, будет оценивать на istream& (в частности, ссылка на cin сам по себе).

Вот как цепочки работ: cin >> x >> y такое же, как (cin >> x) >> y, так что вы можете видеть, что это работает только, когда (cin >> x) вычисляется в cin; ваш пример точно такой же, с отличием, которое вы вызываете, член .get(), а не член operator>>.

+0

ahhh, спасибо за освобождение. Теперь все имеет смысл. – Dan