我想为我的班级重写operator *。我知道如何处理MyClass * MyClass的*但是我如何实现它以便有可能乘以例如:
7 * MyClass
7是让我们说双重,MyClass是MyClass的对象,
感谢您的帮助
答案 0 :(得分:8)
当您为类提供运算符时,运算符实现的参数类型控制您正在处理的情况。
举例说明:
// Declare which operator to overload (+), the types
// that can be added (two Complex objects), and the
// return type (Complex):
public static Complex operator +(Complex c1, Complex c2)
{
return new Complex(c1.real + c2.real, c1.imaginary + c2.imaginary);
}
此方法定义了如果要添加两个Complex
数字时要执行的操作。
如果您尝试使用(例如)double
和Complex
,则编译将失败。
在您的情况下,您只需声明两个版本:
public static MyClass operator *(MyClass c1, MyClass c2)
{
return ...
}
public static MyClass operator *(double n, MyClass c)
{
return ...
}
答案 1 :(得分:2)
在这种情况下,适当的签名是:
public static MyClass operator *(double a, MyClass b)
这意味着它需要double
作为左侧,MyClass
作为右侧,并返回MyClass
。