質問

coutを使用するために:std :: cout << myobject、なぜオストストリームオブジェクトを渡さなければならないのですか?それが暗黙のパラメーターだと思いました。

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

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

ありがとう

役に立ちましたか?

解決

別のメンバー関数を追加していません ostream, 、それはクラスの再定義が必要だからです。追加することはできません myClass, 、以来 ostream 最初に行きます。あなたができる唯一のことは、独立した関数に過負荷を追加することです。これはあなたが例でやっていることです。

他のヒント

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

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

以来 ostream クラスのずっと前に書かれていたので、クラスを入れるという問題がわかります。したがって、オペレーターを自立型関数として実装する必要があります。

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

オペレーターがクラスのメンバー関数として実装される場合、左側は this, 、そして議論は右側になります。 (バイナリ演算子の場合 - 単位演算子も同様に動作します。)

メンバー関数ではなく、自由関数を過負荷にしているためです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top