2012-03-04 5 views
2

入力を受け付けたとき、私は(myDetailsが構造体である)、これが書かれて見てきました:CINと方法書

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

私の問題は、私はそれを理解していないということです。どのように文全体がオブジェクトのようになり、get()?というメソッドを持つことができますか? cinはget()というメソッドを持っていることが分かりますが、cinの作成中の大括弧は何ですか?

+0

あなたの投稿に署名しないでください。 –

+0

よろしくお願いします。メッセージに個人的な感覚を加えていただけです。 – Dan

+0

時間と場所: –

答えて

6

ここの演算子>>は、std :: cinへの参照を返しますので、get()を呼び出すことになります。あなたがmyDetails.weightのget()を呼び出そうとしないように、大括弧が必要です。

より一般的には、ストリーム抽出演算子は通常、このような署名を持っている:チェーンをサポートするように

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

そして、彼らは彼らの最初の引数を返します。これは、>>が左結合であるという事実と組み合わせて、例えば、

全体文はオブジェクトのようになるとのget(というメソッドを持つことができますどのように
operator>>(operator>>(std::cin, a), b); 
+1

説明のために大変ありがとうございました – Dan

1

):同等です

std::cin >> a >> b; 

これは単なるステートメントではないためです。それは表現です。それ自体で、またはより広いフル発現の一部として使用されるかどうかを表現cin >> xは、istream&に評価することを意味し、istream戻りistream&ためoperator>>を過負荷(具体的には、cin参照そのもの)。作品を連鎖方法です

は:(cin >> x)cinと評価されたときにのみ動作することを確認できるようにcin >> x >> yは、(cin >> x) >> yと同じです。あなたの例はまったく同じです。メンバoperator>>ではなく、メンバー.get()を呼び出すという違いがあります。

+0

ああ、それをクリアしてくれてありがとう。すべて今、意味があります。 – Dan