1

何かを機能させる方法を知る必要があります。コンストラクターと初期化子リストで初期化されたいくつかの定数を持つクラスがあります。私が望むのは、いくつかの追加のパラメーターを受け取りながらも初期化子リストを使用する別のコンストラクターを作成できるようにすることです。そのようです:

class TestClass
{
    const int cVal;
    int newX;
    TestClass(int x) : cVal(10)
    { newX = x + 1; }
    TestClass(int i, int j) : TestClass(i)
    { newX += j; }
}

まったくひどい例ですが、要点はわかります。質問は、どうすればこれを機能させることができますか?

4

3 に答える 3

6

あるコンストラクターが同じクラスの別のコンストラクターに委任する方法はありません。共通コードを静的メンバー関数にリファクタリングすることはできますが、静的メンバー関数はフィールドを初期化できないため、使用しているすべてのコンストラクターでフィールド初期化子を繰り返す必要があります。特定のフィールド初期化子に値を計算する複雑な式がある場合は、それを静的メンバー関数にリファクタリングして、すべてのコンストラクターで再利用できるようにすることができます。

これは既知の不便であり、別のコンストラクターに委任する方法はC++0xで提供されます。

于 2009-11-24T23:15:33.907 に答える
0

C++03 ではこれを行うことはできません。初期化リストを再入力する必要があります。これは C++0x で修正される予定です。偶然にも、構文はまさにあなたが持っているものであり、さらに偶然にも、ウィキペディアの例はほとんどあなたのコードです. :)

于 2009-11-24T23:13:55.077 に答える