提问人:intweek 提问时间:10/14/2023 更新时间:10/14/2023 访问量:43
运算符重载不能与颤振中的操作数互换
Operator overloading not interchangeable with operands in flutter
问:
我正在 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++ 中,您可以)
答:
-1赞
arshia_sir
10/14/2023
#1
是的,可以使操作员过载,以便实现第二种情况。您可以定义一个新运算符,该运算符将 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 对象和结果。+
请注意,您可以以类似的方式定义其他运算符以支持其他算术运算。
评论
1赞
intweek
10/15/2023
这是不正确的。它不起作用,因为您仍然将构造函数定义为 + 而不是 + 。您是否尝试运行此代码,因为我收到错误:MyClass
num
num
MyClass
Error: A value of type 'MyClass' can't be assigned to a variable of type 'num'. - 'MyClass' is from 'package:dartpad_sample/main.dart' ('lib/main.dart'). MyClass result2 = 2 + myObject;
评论
num
num
2.multiply(myObject)
myObject.multiply(2)
MyClass.operator*
MyClass
num
MyClass