30

フレンド関数がクラスの外で明示的に定義されることは想定されていませんか?
もしそうなら、メンバー関数と同じように、クラス定義内でフレンド関数を宣言できるのはなぜですか?
これは何ですか ?
オペレーターなどの一部のオペレーターだけでOK<ですか、それともすべてのオペレーターに適用できますか?
全てに当てはまるとすれば、これを行うデメリットはありますか?
それは避けるべきですか?もしそうなら、なぜですか?

class person 
{
public:
    bool operator<(int num)
    {
        return  x < num ? true : false ;
    }
    bool operator<(person& p)
    {
        return  x < p.x ? true : false ;
    }

    friend bool operator<(int num, person &p)
    {
        return  p.x < num ? true : false ;
    }

    void setX(int num)
    {
        x = num;
    }

private:
    int x;


};

更新:
非メンバー演算子のオーバーロードまたはメンバー演算子のオーバーロードの選択を求めているわけではありません。
私が知りたいのは、クラス定義内でフレンドメソッド
の定義を移動できるのはなぜですか? . 何か違反していませんか?そうでない場合、そもそもなぜ友達がいるのですか? オーバーロードをメンバー関数として単純に定義できます (メンバー関数の制限を知っています)。しかし、私はこれを知っていると言っています。その中に (クラスパラメータがあるため) では、なぜクラス定義内でフレンド関数を定義できるのでしょうか?

4

5 に答える 5