C# では、「+」、「-」などの演算子をオーバーロードするには、関数をクラスの静的メンバーにする必要があります。
class MyType
{
/*...*/
public static MyType operator+ (MyType a, MyType b)
{
MyType ret;
/* do something*/
return ret;
}
}
私の知る限り、C++ では次のようにして演算子をオーバーロードできます。
class MyType
{
/*...*/
public:
MyType operator+ (MyType b) // *this is the first operand
{
MyType ret;
/* do something*/
return ret;
}
};
問題は*this
、これが最初のオペランドであるため、最初のオペランドは MyType 型でなければなりません。たとえばMyType
、整数に加算したい場合:
MyType a, b;
b = a + 1; // Valid
b = 1 + a; // Error
C# では、ケースごとに「+」演算子をオーバーロードできます。
私の質問は、静的演算子を使用して、C# と同じように C++ で行うことはできますか? 私の知る限り、フレンド演算子を使用してそれを行う方法は 1 つありますが、関数を継承するときに失われます。