Java や C# では、演算子のオーバーロードのようなものは存在しないことを私は知っています。これらの言語のいずれかで演算子のオーバーロードを実現するタスクが先生から与えられました。私はこれらの言語の深い概念を知りません。基本的な OOP だけです。それで、これを達成する他の方法があると誰でも言うことができますか?
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 が 2 つのオブジェクトが等しいことを比較する方法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 に答える