gpt4 book ai didi

c++ - 没有默认构造函数的类成员

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:00:07 27 4
gpt4 key购买 nike

假设我有一个没有默认构造函数的类 A,一个工厂方法 factoryA返回类型 A 的对象和以 A 作为其成员的类 B。我知道在这种情况下,必须在 B 的构造函数初始化列表中初始化 B 的类型 A 的成员。我不完全清楚为什么,如果有人能向我解释,那就太好了。此外,如果 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);
}
};

最佳答案

成员对象总是在进入构造函数体(花括号之间的部分)之前初始化。如果您没有在初始化列表中提及成员,它将被默认构造。所以提一下!

B::B(int j) : _a(factoryA(0 < j)) { };

如果 j 大于 0,则使用参数值 true 调用函数 factoryA,否则调用 false ,并使用该调用返回的值初始化成员 _a

关于c++ - 没有默认构造函数的类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12328150/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com