亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我不明白復制構造函數的詳細工作原理

我不明白復制構造函數的詳細工作原理

12345678_0001 2023-08-16 18:17:56
這段代碼的目的是什么?public Fraction(Fraction other) {     num = other.num;      denom = other.denom;  }如果你有這樣的構造函數:public Fraction(int n, int d) {     num = n;     denom = d; }為什么必須初始化other.numtonum和other.denomto denom. 復制構造函數的語法是什么?什么目的?
查看完整描述

4 回答

?
梵蒂岡之花

TA貢獻1900條經驗 獲得超5個贊

使用起來方便多了。


如果你有一個簡單的構造函數,例如:

public Fraction(int n, int d) {
    num = n;
    denom = d;
}

您可以使用以下代碼復制實例原始:

Fraction copy = new Fraction(original.num, original.denom);

使用復制構造函數時,您執行以下調用:

Fraction copy = new Fraction(original);

如果您有很多參數,這會更方便。當您更改構造函數或對象的參數時會發生什么?如果沒有復制構造函數,您必須更改所有此類調用。


M. Prokhorov 的評論中值得注意的事實:

復制構造函數沒有特殊的語法,它們只是實現參數化構造函數的邏輯樣式。


查看完整回答
反對 回復 2023-08-16
?
呼喚遠方

TA貢獻1856條經驗 獲得超11個贊

如果你只是簡單地輸入


public Fraction(Fraction other) {

}

Java 不會簡單地猜測您想要將 的值復制other到新對象中。Java 不會像這樣自動為你初始化變量。為了使其成為復制構造函數,您仍然需要手動鍵入將字段復制到other您正在創建的對象的代碼。像這樣:


public Fraction(Fraction other) {

    num = other.num; 

    denom = other.denom; 

}

構造函數創建一個新的Fraction,但您在其中鍵入的代碼手動執行“復制”,使其成為“復制構造函數”并允許您執行以下操作


Fraction a = Fraction(4, 20);

Fraction b = new Fraction(a); 

// b has the same values as a but is a different object

當然,如果您已經有另一個構造函數,則創建復制構造函數的更短方法是


public Fraction(int n, int d) {

    num = n; 

    denom = d; 

}


public Fraction(Fraction other) {

    this(other.num, other.denom);

}


查看完整回答
反對 回復 2023-08-16
?
慕田峪7331174

TA貢獻1828條經驗 獲得超13個贊

如果您有一個對象實例,例如Fraction

Fraction?fr?=?new?Fraction(1,?2);?//represents?1/2

當然,您可以通過將其分配給新變量來復制它:

Fraction?copy?=?fr;

但現在, 和frcopy指向同一個對象(內存中的同一位置)。如果由于某種原因copy改變為1/3,fr也會改變。有時您想要原始對象的全新副本。這就是寫起來非常方便的地方:

Fraction?copy?=?new?Fraction(fr);

現在您可以獨立操作copy,而fr不必擔心其中任何一個發生不必要的更改。

查看完整回答
反對 回復 2023-08-16
?
肥皂起泡泡

TA貢獻1829條經驗 獲得超6個贊

使用復制構造函數而不是傳遞所有參數的構造函數有兩個很好的理由:

  1. 當我們有一個具有許多屬性的復雜對象時,使用復制構造函數很方便

  2. 如果我們向現有類添加一個屬性,那么我們只需更改復制構造函數以考慮此新屬性,而不是更改其他構造函數的每次出現


查看完整回答
反對 回復 2023-08-16
  • 4 回答
  • 0 關注
  • 175 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號