#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;
答案 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;
}
或者,您可以提供myClass
到int
与operator int()
成员的转换,但我更喜欢第一个选项。
我可能不需要提及运算符重载应该始终非常谨慎。