Fooというクラスがあるとしましょう。Fooにはデフォルトのコンストラクターがありません。コンストラクターFoo(int x、float y)があります。
Barはコンテナクラスです。Fooのインスタンスを含むベクトルが含まれています。
Bar::Bar(int numberOfFoos, int x, float y) {
foovector.resize (numberOfFoos);
for(int i = 0; i < numberOfFoos; i++) {
**read below**
}
この時点で、Fooのコンストラクターを呼び出して、パラメーターintxとfloatyを渡します。Fooのコンストラクターは、xとyの値に応じて異なることを行います。
Fooにデフォルトのコンストラクターがあったとしましょう。ベクトルのサイズ変更関数は正確に何をしますか?デフォルトのコンストラクターを呼び出さずに、ベクトルのサイズを変更するだけですか?つまり、Foo型のn個の要素用にスペースが予約されていますが、それらは何にも初期化されていませんか?
この場合のように、それがない場合はどうなりますか?
forループでは、各Foo要素を次のように初期化します。
foovector[i].Foo(int x, float y);
しかし、このようにドットアクセス演算子を使用してコンストラクターを呼び出すことはできません。この時点では、コンストラクターがサイズ変更関数によって既に呼び出されているかどうかさえわかりません。
質問は、どうすればいいですか?
クラスのベクトルに関する別の関連する質問:
Fooには、floatを保持するベクトルがあります。float xパラメーターは、保持する必要のあるfloatの数です。Fooのコンストラクターには行があります
arrayofFloats.resize (x);
しかし、それはコンピュータがFooのサイズを事前に知らないことを意味します。そして、各fooは異なるサイズを持つことができます。それはFooのベクトルに問題を引き起こしませんか?各Fooが異なるサイズを持つことができる場合、特定のサイズのベクトルをどのように宣言できますか?
英語が下手でごめんなさい、それが十分にはっきりしていることを願っています。
ありがとうございました。