2009-12-03 50 views
2

我有我的第一個OOP類的任務,我理解這一切,包括以下語句:使用構造函數鏈來完成這個構造的正確方法?

你應該創建一個名爲ComplexNumber類。該類將包含定義爲雙精度的私有數據成員中複數的實部和虛部。你的類應該包含一個構造函數,它允許虛數的數據成員被指定爲構造函數的參數。默認(非參數化)構造函數應該將數據成員初始化爲0.0。

當然,我知道如何創建這些構造函數而不將它們鏈接在一起,並且賦值不需要鏈接它們,但我想按照我的意思。

沒有鏈接在一起,我的構造是這樣的:

class ComplexNumber 
{ 
    private double realPart; 
    private double complexPart; 

    public ComplexNumber() 
    { 
     realPart = 0.0; 
     complexPart = 0.0 
    } 

    public ComplexNumber(double r, double c) 
    { 
     realPart = r; 
     complexPart = c; 
    } 
    // the rest of my class code... 
} 
+3

C#4.0使這項任務過時與'System.Numerics.Complex' =) – 2009-12-03 01:33:39

+0

太糟糕了我必須做我自己! :) – Alex 2009-12-03 01:34:30

+1

啊,如果只有我們所有人都可以在最新版本發佈後立即跳到最新版本。我仍然使用.NET 2.0和VS2005。 :-) – 2009-12-03 01:36:52

回答

10

這是你在找什麼?

public ComplexNumber() 
    : this(0.0, 0.0) 
{ 
} 

public ComplexNumber(double r, double c) 
{ 
    realPart = r; 
    complexPart = c; 
} 
+0

啊,是的,初始化它們都爲0.0,謝謝!我仍然試圖理解構造鏈的概念,所以它可以工作,但爲什麼/如何? 我的教授還沒有觸及構造函數鏈,他也不會,但我想學習如何使用它。 – Alex 2009-12-03 01:33:28

+1

@Alex它與調用其他方法非常相似,除了構造函數沒有名稱 - 所以不是這個。方法()'我們只是調用'this()',或者調用父/超類的構造函數'base()' – 2009-12-03 01:37:29

+0

就像方法鏈接一樣。你正在用構造函數A調用構造函數B,並帶有B所需的參數。 – 2009-12-03 01:37:30

3

@Rex有鏈接的連接答案。

然而,在這種情況下,鏈接或任何初始化是沒有必要的。 CLR將在對象構造函數中將字段初始化爲默認值。對於雙打,這會使它們初始化爲0.0。所以在默認的構造函數中的賦值並不是絕對必要的。

有些人喜歡顯式初始化它們對文檔或可讀性領域雖然。

+0

感謝您的解釋,但它是永遠絕對有必要創建一個默認的構造函數? (在C#中) – Alex 2009-12-03 01:37:38

+0

對於某些序列化過程,是的。 – 2009-12-03 01:50:46

+0

一個我發現默認構造函數被需要的地方是當對某些對象進行數據綁定時(例如datagridview) – 2009-12-03 01:54:09

1

我仍然試圖把握構造鏈的概念,所以它的工作原理,但爲什麼/如何?

通過在構造函數定義中使用'this'關鍵字來構造函數鏈接'如何',並在Rex M的示例中顯示。

的「爲什麼」的構造函數鏈是重用一個構造函數的實現。如果第二個構造函數的實現(主體)很長且複雜,那麼您希望重用它(即鏈接到它或調用它),而不是將它複製並粘貼到其他構造函數中。另一種可能是把這些代碼,這是幾個構造函數之間共享,轉化爲從幾個構造函數調用的公用子程序:但是,這個子程序不會被允許初始化readonly領域(這隻能從構造函數初始化,而不是來自子程序),所以構造函數鏈是解決這個問題的方法。