假设我有一个没有默认构造函数的 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);
}
};