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

您可以更改您的classwith 运算符重载。

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 + mCint. 这就是为什么你需要另一个 operator int operator +(int, myClass)

于 2012-07-26T16:50:43.653 回答
1

再提供两个operator+.

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

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

或者,您可以提供与成员的转换myClassint尽管operator int()我更喜欢第一个选项。

我可能不需要提到运算符重载应该始终非常小心。

于 2012-07-26T16:52:16.517 回答