0

このスレッドの呼び方がよくわかりませんでした。状況は以下です。テンプレートクラスがありArray<T>ます:

template <typename T> class Array{
private:
    T* m_cData;
    int m_nSize;
    static int s_iDefualtSize;
public:
    Array();
    Array(int nSize);
}

Array<T>ここで、のオブジェクトを保持する、 から派生した特殊なクラスを書きたいと思いclass Boxesます。

class Boxes{
private:
    double m_dFull;
public:
    Boxes(double dFull=0): m_dFull(dFull) {}
};

私は次の方法でそれを行います:

class BoxesArray : public Array<Boxes>{
public:
    BoxesArray() : Array<Boxes>::Array() {}
    BoxesArray(int nValue) : Array<Boxes>::Array(nValue) {}
}

そして、専用の機能をいくつか追加しますBoxes。わかりましたので、ここで混乱の一番が来ます。呼び出しArrayBoxes()は、オブジェクト配列をインスタンス化し、このオブジェクトを「準備」してボックスを保持するように見えますよね? しかし、どのようにして (つまり、上記のコードのどの部分で) オブジェクトArrayBoxesを作成した後、既にボックスで満たされているのでしょうか? そして、2 番目の質問です。ArrayBox を満たすこれらの Box は、Box の既定のコンストラクターを使用して構築されていることがわかります (Boxm_dFullは 0 に設定されています)。与える、たとえば、ボックスm_dFull = 0.5)?すべての編集で、私の質問が明確になったことを願っています。

4

2 に答える 2

0

しかし、どのようにして (つまり、上記のコードのどの部分で) ArrayBoxes を作成してオブジェクト化した後、既に Boxes で満たされているのでしょうか?

コンストラクターがBoxesArrayコンストラクターを呼び出しているようArray<Boxes>です。そうでない場合でも、C++ は暗黙的にそれを呼び出します。

そして、2 番目の質問は、ArrayBoxes を満たすこれらの Boxes が、Boxes の既定のコンストラクターを使用して構築されていることがわかります (Boxes m_dFull は 0 に設定されています)。 (たとえば、Boxes m_dFull = 0.5 を指定)?

次のようにコンストラクターを追加する必要がありますArray<T>Array(int nsize, double defval);

内部では、デフォルト値を呼び出すボックスで配列を構築します。

于 2013-03-15T23:05:01.670 に答える
0

既定のコンストラクターの本体で要件を満たすように配列を設定するコードを配置するか、メンバーの初期化リストに含めるインスタンスを受け取るBoxes非既定のコンストラクターを呼び出すArray<Boxes>必要があります。Boxes

于 2013-03-15T16:50:32.343 に答える