3

私はC ++を初めて使用します。コンストラクターについて明確にする必要があります。私の質問は次のとおりです。

  1. クラス オブジェクトの配列を作成するときに、パラメーター化されたコンストラクターを使用できますか?
  2. それとも、クラス オブジェクトの配列を作成するときにデフォルトのコンストラクターしか使用できないのでしょうか?

どうすればできるのか、できないのか理由を教えてください。これについては、より深い理解が必要です。

4

3 に答える 3

6

パラメーター化されたコンストラクターを使用して、配列を初期化できます。次の例を参照してください。

class Foo
{
public:
    Foo(int _a, bool _b) : a{_a}, b{_b} {}
private:
    int a;
    bool b;
};

int main() {
    Foo things[] = {{5, true},
                    {3, false},
                    {7, true}};
    return 0;
}

配列thingsFooオブジェクトです。均一な初期化を使用Fooして、配列内に 3 つのオブジェクトを構築しています。これらは、クラスで定義したパラメーター化されたコンストラクターに依存しています。

于 2015-02-11T13:44:24.660 に答える
4

はい、可能ですが、C++03 にはいくつかの制限があります。これは有効です:

A a[3] = { x, y, z };

ただし、複数の引数を取るコンストラクターを呼び出すには、次のようにする必要があります。

A a[3] = { A(x1, x2, x3), A(y1, y2, y3), A(z1, z2, z3) };

C++11 では、新しい統一された初期化構文のおかげで簡単です。

A a[3] = { {x1, x2, x3}, {y1, y2, y3}, {z1, z2, z3} };
于 2015-02-11T13:44:16.660 に答える
2

このクラスがあるとしましょう:

class Foo
{
public:
    Foo(int i, const std::string& s);
    // ...
};

それで

  1. はい:

    std::vector<Foo> myFooVector(5, Foo(1, "bar"));
    

    上記は、それぞれが引数を持ち、パラメーター化されたコンストラクターに送信される5 つのオブジェクトのベクトルを作成します。Foo1"bar"

    たとえば、配列を使用することもできます

    std::array<Foo, 2> myFooArray = {
        { 1, "bar" },
        { 2, "quug" }
    };
    

    上記は、それぞれがパラメーター化されたコンストラクターを使用して構築された2 つのオブジェクトを含む配列を作成します。Foo

  2. コンストラクターを明示的に呼び出さない場合は、既定のコンストラクターが使用されます。上記の例を使用すると、次のようになります。

    std::vector<Foo> myFooVector(5);
    

    これにより、デフォルトで構築された 5 つのオブジェクトを含むベクトルが作成されFooます。

    std::array<Foo, 2> myFooArray;
    

    これにより、デフォルトで構築された 2 つのFooオブジェクトの配列が作成されます。

于 2015-02-11T13:46:36.177 に答える