我想覆盖所有=运算符,其中lhs是已知类型,rhs是我自己的类。举个例子:
class MyClass;
class Override {
long operator+=(long X, const MyClass& Y);
}
long Override::operator+=(long X, const MyClass& Y) {
return X += (long)Y;
}
void main(int argc, char** argv) {
MyClass X(1);
long Y = 1;
Y += 1; // works great
Y += (long)X; // works great
Y += X; // does not work
}
MyClass有适当的强制转换和创建方法。
我知道我错过了什么,但我无法弄清楚是什么。
我在
上遇到编译错误 Y += X
具有以下功能
long Override::operator(long& X, const MyClass& Y) ...
谁能告诉我这样做的正确方法是什么?
感谢 领域
答案 0 :(得分:2)
班级Override
在这里完全没用。只需写一个全局函数:
long &operator+=(long &X, const MyClass& Y) {
return X += (long)Y;
}
请注意,第一个参数(X
)必须通过引用传递,因为它将由运算符修改。
答案 1 :(得分:0)
像这样(我创建了一些MyClass castable,例如)
class MyClass
{
long a;
public:
MyClass(long a) : a(a) {}
operator long () const
{
return a;
}
};
long operator+=(long X, const MyClass& Y) {
return X += (long)Y;
}
int main(int argc, char** argv) {
MyClass X(1);
long Y = 1;
Y += 1; // works great
Y += (long)X; // works great
Y += X; // works too
return 0;
}