[英]Java equivalent of C++ copy assignment operator
我試圖理解用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;
}
我在正確的軌道上嗎? 非常感謝您的幫助。
Ampersand &
用C ++指定引用。 需要提供類似於Java對象提供的“開箱即用”的行為,因為Java通過引用來管理對象。
傳遞引用時,C ++中沒有復制。 實際上,避免復制是使用const
引用作為函數參數的主要原因。
您顯示的代碼也不執行復制:它根據“已分配”的值更改其狀態。 在Java中最接近建模的方法是提供一個assign(Class other)
方法,該方法更改當前狀態以匹配傳入的對象的狀態:
Class assign(Class other) {
this.properties = other.properties;
return this;
}
您需要使用此方法代替C ++的賦值,如下所示:
Class clOne(args1);
Class clTwo(args2);
clOne = clTwo; // Using the assignment operator
成為這個:
Class clOne = new Class(args1);
Class clTwo = new Class(args2);
clOne.assign(clTwo); // Using the assignment method instead of the operator
我在正確的軌道上嗎?
的種類。 但並不完全。 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
。 首先, 只有在類實現標記接口Cloneable
時才應使用clone
。 其次, clone
的設計可以說是破壞了 , 不建議使用它 。
1當然,您可以重新分配對象的成員(除非它們是final
),並且您可以通過提供方法assign
來模仿C ++的復制賦值運算符。 但是,這不是Java中常規的處理方式(盡管它可能在某些特殊情況下有它的位置)。
你幾乎走在正確的軌道上。 當直接從一個對象分配(復制)到另一個對象時,使用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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.