如何重载加号以对未确定数量的对象求和

时间:2012-07-26 16:49:01

标签: c++

#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;

3 个答案:

答案 0 :(得分: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+

答案 1 :(得分:2)

您需要一个重载运算符,即int operator+(int, myClass)

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

+操作从左到右进行评估,因此mC + mC的类型为int。这就是您需要另一个运算符int operator +(int, myClass)

的原因

答案 2 :(得分:1)

再提供两次operator+重载。

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

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

或者,您可以提供myClassintoperator int()成员的转换,但我更喜欢第一个选项。

我可能不需要提及运算符重载应该始终非常谨慎。