在 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# 中一样使用静态运算符吗?据我所知,有一种方法可以做到这一点,使用友元运算符,但是在继承函数时它们会丢失。