我正在 flutter 中制作一个自定义数字类,想要在该类与普通整数和双精度数之间进行基本算术运算。 所以我在类定义中重载了乘法运算符并尝试使用它。 示例(不是实际的类,但类实现很重要:
class MyClass {
double value;
MyClass(this.value);
MyClass operator *(dynamic other) {
if (other is num) {
return MyClass(this.value * other);
}
throw ArgumentError("Unsupported operation");
}
}
void main() {
MyClass myObject = MyClass(5.0);
MyClass result1 = myObject * 2;
MyClass result2 = 2 * myObject;
print(result1.value); // Expected output: 10.0
print(result2.value); // Expected output: 10.0
}
但是在第二种情况(
2 * myObject
)中发生的情况是我收到错误,因为您无法将 MyClass
添加到 num
,而您可以将 num
添加到 MyClass
。
有什么办法可以让操作符超载,从而实现第二种情况吗? (例如,就像在 C++ 中一样)
是的,可以使操作员过载,从而实现第二种情况。您可以定义一个新运算符,它将 num 作为其左操作数,将 MyClass 对象作为其右操作数。这是一个示例实现:
class MyClass {
double value;
MyClass(this.value);
MyClass operator *(dynamic other) {
if (other is num) {
return MyClass(this.value * other);
}
throw ArgumentError("Unsupported operation");
}
MyClass operator +(num other) {
return MyClass(this.value + other);
}
}
void main() {
MyClass myObject = MyClass(5.0);
MyClass result1 = myObject * 2;
MyClass result2 = 2 + myObject;
print(result1.value); // Expected output: 10.0
print(result2.value); // Expected output: 7.0
}
在此实现中,我们定义了一个新运算符
+
,它将 num 作为其左操作数,将 MyClass 对象作为其右操作数。该实现只是将 num 添加到 MyClass 对象的值,并返回一个新的 MyClass 对象和结果。
注意,您可以以类似的方式定义其他运算符来支持其他算术运算。