私はC ++を初めて使用します。コンストラクターについて明確にする必要があります。私の質問は次のとおりです。
- クラス オブジェクトの配列を作成するときに、パラメーター化されたコンストラクターを使用できますか?
- それとも、クラス オブジェクトの配列を作成するときにデフォルトのコンストラクターしか使用できないのでしょうか?
どうすればできるのか、できないのか理由を教えてください。これについては、より深い理解が必要です。
私はC ++を初めて使用します。コンストラクターについて明確にする必要があります。私の質問は次のとおりです。
どうすればできるのか、できないのか理由を教えてください。これについては、より深い理解が必要です。
パラメーター化されたコンストラクターを使用して、配列を初期化できます。次の例を参照してください。
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;
}
配列things
はFoo
オブジェクトです。均一な初期化を使用Foo
して、配列内に 3 つのオブジェクトを構築しています。これらは、クラスで定義したパラメーター化されたコンストラクターに依存しています。
はい、可能ですが、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} };
このクラスがあるとしましょう:
class Foo
{
public:
Foo(int i, const std::string& s);
// ...
};
それで
はい:
std::vector<Foo> myFooVector(5, Foo(1, "bar"));
上記は、それぞれが引数を持ち、パラメーター化されたコンストラクターに送信される5 つのオブジェクトのベクトルを作成します。Foo
1
"bar"
たとえば、配列を使用することもできます
std::array<Foo, 2> myFooArray = {
{ 1, "bar" },
{ 2, "quug" }
};
上記は、それぞれがパラメーター化されたコンストラクターを使用して構築された2 つのオブジェクトを含む配列を作成します。Foo
コンストラクターを明示的に呼び出さない場合は、既定のコンストラクターが使用されます。上記の例を使用すると、次のようになります。
std::vector<Foo> myFooVector(5);
これにより、デフォルトで構築された 5 つのオブジェクトを含むベクトルが作成されFoo
ます。
と
std::array<Foo, 2> myFooArray;
これにより、デフォルトで構築された 2 つのFoo
オブジェクトの配列が作成されます。