操作符重载不能与Flutter中的操作数互换

h9a6wy2h  于 2023-10-22  发布在  Flutter
关注(0)|答案(1)|浏览(125)
  • 我在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++中可以)

xfyts7mz

xfyts7mz1#

是的,可以使操作员过载,以便实现第二种情况。您可以定义一个新的操作符,该操作符将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对象和结果。
请注意,您可以以类似的方式定义其他运算符,以支持其他算术运算。

相关问题