1

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

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

谢谢艺术

4

2 回答 2

3

这个类Override在这里完全没用。只需编写一个全局函数:

long &operator+=(long &X, const MyClass& Y) {
   return X += (long)Y;
}

请注意,第一个参数 ( X) 必须通过引用传递,因为它将由操作员修改。

于 2013-02-04T22:46:29.930 回答
0

像这样(例如,我创建了一些 MyClass castable to long )

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;
}
于 2013-02-04T22:48:50.780 回答