7

C++で書かれたこの演算子関数を理解し、Javaに変換しようとしています。

Class& Class::operator=(const Class& In) {

   properties = In.properties;

   return *this;

}

これは単にクラス オブジェクトのインスタンスとプロパティをコピーするだけですか? 私はすでに何かを書いています:

public static Class copy(Class obj) {
    //returns new instance of Class individual
    Class copy =  new Class(obj.row_num, obj.col_num, obj.input_length, obj.output_length, obj.max_arity, obj.function_length, obj.levels_back);
    copy.genes = obj.genes.clone();
    return copy;
}

私は正しい軌道に乗っていますか?助けてくれて本当にありがとうございます。

4

3 に答える 3

2

私は正しい軌道に乗っていますか?

すこし。しかし、そうではありません。C++ では、既存のオブジェクトの再割り当てと新しいオブジェクトの作成が区別されます。

Java はそうではありません。Java 1の既存のオブジェクトに再割り当てすることはできません(ただし、もちろん参照を再割り当てすることはできます)。Java では、(オブジェクトへの参照を割り当てるのではなく) オブジェクトをコピーするために、通常、コピー コンストラクターを使用します。

Class(Class other) {
    // Copy members of `other` into `this`.
}

そして、次のように使用します。

Class x = new Class(something here);
Class y = new Class(x); // copy

特に、これはすべての Java コンテナーが実装するものです。私は頼りませんclone。まずclone、クラスがタグ インターフェイスを実装している場合にのみ使用する必要がありますCloneable。第二に、cloneの設計は間違いなく壊れており、その使用は推奨されません


もちろん、オブジェクトのメンバーを再割り当てすることもできます (ただし、そうないfinal場合)。それを行うメソッドを提供することで、C++ のコピー代入演算子を模倣できますassign。ただし、これは Java で物事を行う従来の方法ではありません (ただし、いくつかの例外的な場合にはその場所があるかもしれません)。

于 2013-10-17T14:00:02.097 に答える
2

あなたはほとんど正しい軌道に乗っています。C++ のコピー代入演算子は、あるオブジェクトから別のオブジェクトに直接代入 (コピー) するときに使用されます。Java オブジェクトは参照を介してのみアクセスできるため、そのような割り当ては無意味です。C++ のセマンティクスと正確に一致させるには、同等の Java は次のようになります。

public Class copy(Class obj) {
    row_num = obj.row_num;
    col_num = obj.col_num;
    // etc., etc.
    genes = obj.genes.clone();
    return this;
}
于 2013-10-17T14:00:19.343 に答える