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 をいくつか作成しました)

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 に答える