2

私は最初のOOPクラスの割り当てを持っており、次のステートメントを含むすべてを理解しています。

ComplexNumberというクラスを作成する必要があります。このクラスには、doubleとして定義されたプライベートデータメンバーの複素数の実数部と虚数部が含まれます。クラスには、虚数のデータメンバーをコンストラクターのパラメーターとして指定できるようにするコンストラクターが含まれている必要があります。デフォルトの(パラメーター化されていない)コンストラクターは、データメンバーを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...
}
4

3 に答える 3

10

これはあなたが探しているものですか?

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

public ComplexNumber(double r, double c)
{
     realPart = r;
     complexPart = c;
}
于 2009-12-03T01:30:30.813 に答える
3

@Rexには、連鎖に対する接続の答えがあります。

ただし、この場合、連鎖や初期化は必要ありません。CLRは、オブジェクトコンストラクター中にフィールドをデフォルト値に初期化します。doubleの場合、これにより0.0に初期化されます。したがって、デフォルトのコンストラクターの場合の割り当ては厳密には必要ありません。

ただし、ドキュメントや読みやすさのためにフィールドを明示的に初期化することを好む人もいます。

于 2009-12-03T01:32:37.897 に答える
1

私はまだコンストラクタチェーンの概念を理解しようとしているので、それは機能しますが、なぜ/どのように?

コンストラクター定義で「this」キーワードを使用するコンストラクターチェーンの「how」。RexMの例に示されています。

コンストラクターチェーンの「理由」は、コンストラクターの実装を再利用することです。2番目のコンストラクターの実装(本体)が長くて複雑な場合は、他のコンストラクターにコピーアンドペーストするのではなく、再利用(つまり、チェーンするか呼び出す)する必要があります。別の方法として、複数のコンストラクター間で共有されるコードを、複数のコンストラクターから呼び出される共通のサブルーチンに入れることもできます。ただし、このサブルーチンでは、readonlyフィールドを初期化できません(コンストラクターからのみ初期化でき、サブルーチンから)、コンストラクターチェーンはその回避策です。

于 2009-12-03T01:42:49.083 に答える