6

cout を std::cout << myObject のように使用するには、なぜ ostream オブジェクトを渡す必要があるのですか? それは暗黙のパラメーターだと思いました。

ostream &operator<<(ostream &out, const myClass &o) {

    out << o.fname << " " << o.lname;
    return out;
}

ありがとう

4

3 に答える 3

6

ostreamクラスを再定義する必要があるため、別のメンバー関数を に追加していません。が最初に実行されるためmyClass、 に追加することはできません。ostreamできることは、独立した関数にオーバーロードを追加することだけです。これは、この例で行っていることです。

于 2010-12-03T16:53:58.660 に答える
2

そうでなければ最初の引数になるクラスのメンバー関数である場合のみ。したがって、次のようになります。

class ostream {
    ...
    ostream &operator << (const myClass &o);
    ...
};

あなたのクラスのずっと前に書かれたのでostream、そこにあなたのクラスを入れるという問題が見えます。したがって、演算子を独立した関数として実装する必要があります。

(return type) operator << ( (left hand side), (right hand side) );

演算子がクラスのメンバー関数として実装されている場合、左辺はthisで、引数は右辺になります。(二項演算子の場合 - 単項演算子は同様に機能します。)

于 2010-12-03T16:55:53.023 に答える
-1

メンバー関数ではなく、フリー関数をオーバーロードしているためです。

于 2010-12-03T16:54:34.657 に答える