你如何覆盖operator + =

时间:2013-02-04 22:42:18

标签: c++ override

我想覆盖所有=运算符,其中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) ...

谁能告诉我这样做的正确方法是什么?

感谢 领域

2 个答案:

答案 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;
}