0
#include <cmath>
#include <iostream>
#include <cstdlib>
using namespace std;

class myClass {
    int d;

public:

    myClass(){};

    int get_rand() const {
        return rand() % 10;
    }
};

int operator +(myClass d, myClass e) {
    return d.get_rand() + e.get_rand();
}

int main() {
    myClass mC;
    int sum = mC + mC;
    cout << sum;

}

私は、たとえば、好きなだけ多くの Mc を持てるようにしたいと考えています。int sum = mC + mC + mC + mC;

4

3 に答える 3

4

class演算子のオーバーロードを変更できます。

class myClass {
    int d;

public:

    myClass(){ d = get_rand(); };

    int get_rand() const {
        return rand() % 10;
    }

    myClass operator + (myClass b) const { b.d += d; return b; }
    operator int () const { return d; }
};

その後、外部はもう必要ありoperator+ません。

于 2012-07-26T16:52:56.597 に答える
2

int operator+(int, myClass)これには、オーバーロードされた演算子、つまり次のものが必要です。

int operator +(int d, myClass e) {
    return d + e.get_rand();
}

+演算は左から右に評価されるため、 の型はmC + mCですint。これが、別のオペレーターが必要な理由ですint operator +(int, myClass)

于 2012-07-26T16:50:43.653 に答える
1

のオーバーロードをさらに 2 つ指定しますoperator+

int operator +(int d, myClass e) {
    return d + e.get_rand();
}

int operator +(myClass d, int e) {
  return d.get_rand() + e;
}

別の方法として、メンバーを使用してからmyClassへの変換を提供することもできますが、私は最初のオプションを使用することをお勧めします。intoperator int()

演算子のオーバーロードは常に細心の注意を払って行う必要があることは、おそらく言うまでもありません。

于 2012-07-26T16:52:16.517 に答える