提问人:Donut 提问时间:6/14/2018 最后编辑:songyuanyaoDonut 更新时间:6/14/2018 访问量:126
调用非默认构造函数作为成员初始化
Call non-default constructor as member initialization
问:
我有一个类“A”和一个类“B”,使得 A 包含 B 的实例
class A
{
B b = B(parameters...);
Other thing = 3;
}
这段代码的问题在于 B 没有(也不应该!)有复制构造函数,所以编译器抱怨
我希望能够像下面这样调用 B 的构造函数,但它将其解释为函数声明
class A
{
B b(parameters...);
Other thing = 3;
}
有没有办法在类的定义中调用非默认构造函数?
答:
2赞
songyuanyao
6/14/2018
#1
默认成员初始值设定项(因为 C++11)仅支持大括号或等于初始值设定项;您可以在此处使用大括号初始值设定项。
class A
{
B b{parameters...};
Other thing = 3;
};
1赞
dimo raichev
6/14/2018
#2
如果你需要使复制构造函数不可见,你可以让它private
Class B
{
public:
B(parameters...){};
private:
B(B b){};
}
至于你的代码,我认为你的问题是你需要在 A 的构造函数中启动成员,如下所示:
class A
{
A()
: B(parameters...)
{
thing = 3;
}
B b;
Other thing;
}
评论
0赞
Serge Ballesta
6/14/2018
也许不那么现代,但仍然易于书写、阅读和理解。唯一的缺点是成员声明和构造函数中的初始化之间存在重复。在 C++11 中添加的原因...Other thing = 3;
评论
B b = B(parameters...);