我知道在 Java 和 C# 中没有运算符重载之类的东西。我的老师给了我一个任务,以在任何这些语言中实现运算符重载。我不知道这些语言的深层概念,只知道基本的 OOP。那么任何人都可以告诉是否有任何其他方法可以实现这一目标?
问问题
336 次
2 回答
6
在 C# 中有一种称为运算符重载的东西,请查看MSDN中的以下代码片段:
public struct Complex
{
public int real;
public int imaginary;
public Complex(int real, int imaginary)
{
this.real = real;
this.imaginary = imaginary;
}
// 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);
}
}
于 2012-11-24T15:09:36.813 回答
0
正如 des 所示,C# 确实有运算符重载。另一方面,Java 没有。Java 比较两个对象是否相等的方式是通过重写equals(Object)
从基对象继承的方法来完成的java.lang.Object
。这是一个示例用法:
public class MyClass {
private int value;
@Override
public boolean equals(Object o) {
return o instanceof MyClass && ((MyClass)o).value == this.value;
}
}
当然,这只是复制重载==
运算符的一种解决方法。对于其他运营商,如>=
或<=
没有。但是,您可以使用 OO使用通用接口重新创建它:
interface Overloadable<T> {
public boolean isGreaterThan(T other);
public boolean isLessThan(T other);
}
public class MyClass implements Overloadable<MyClass> {
private int value;
@Override
public boolean equals(Object o) {
return o instanceof MyClass && ((MyClass)o).value == this.value;
}
@Override
public boolean isGreaterThan(MyClass other) {
return this.value > other.value;
}
@Override
public boolean isLessThan(MyClass other) {
return this.value < other.value;
}
}
这绝不是真正的运算符重载,因为,你并没有重载运算符。然而,它确实提供了以相同方式比较对象的能力。
于 2012-11-24T15:34:49.403 回答