デフォルトのコンストラクターのないクラスA、タイプAのオブジェクトを返すファクトリメソッドfactoryA、およびメンバーとしてAを持つクラスBがあるとします。この場合、BのタイプAのメンバーは、Bのコンストラクター初期化リストで初期化する必要があることを私は知っています。理由は私には完全には明らかではないので、誰かが私にそれを説明できればそれは素晴らしいことです。また、Aのコンストラクターへのパラメーターを、Bのコンストラクター内で計算する必要がある場合、たとえば、データベースまたはその性質のものにクエリを実行する必要がある場合はどうなりますか?Aにデフォルトのコンストラクターを提供せずに以下のセットアップを使用する方法はありますか?前もって感謝します。
class A {
private:
int _i;
public:
A(int i) : _i(i) {}
};
A factoryA(bool b) {
if(b)
return A(1);
else return A(2);
}
class B {
private:
A _a;
public:
B(int j) {
if(j > 0)
_a = factoryA(true);
else _a = factoryA(false);
}
};