-1

Java や C# では、演算子のオーバーロードのようなものは存在しないことを私は知っています。これらの言語のいずれかで演算子のオーバーロードを実現するタスクが先生から与えられました。私はこれらの言語の深い概念を知りません。基本的な OOP だけです。それで、これを達成する他の方法があると誰でも言うことができますか?

4

2 に答える 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 に答える