2009-12-03 85 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领域(这只能从构造函数初始化,而不是来自子程序),所以构造函数链是解决这个问题的方法。