C++ 如何在另一个构造函数中调用对象构造函数?
我有一个抽象类C++ 如何在另一个构造函数中调用对象构造函数?,c++,c++11,constructor,C++,C++11,Constructor,我有一个抽象类A和一个带有构造函数的类B: B(A &a) {...} 现在,我在主程序中创建这些对象,如下所示: int main(){ std::unique_ptr<A> a = make_A();//don't mind make_A() if(a==null) a = make_default_A(); B b (*a); } 显然,这是错误的,因为我不能像上面的代码那样调用B的构造函数,但我不知道怎么做。我想到的唯一解决办法是使用std:
A
和一个带有构造函数的类B
:
B(A &a) {...}
现在,我在主程序中创建这些对象,如下所示:
int main(){
std::unique_ptr<A> a = make_A();//don't mind make_A()
if(a==null)
a = make_default_A();
B b (*a);
}
显然,这是错误的,因为我不能像上面的代码那样调用B
的构造函数,但我不知道怎么做。我想到的唯一解决办法是使用std::unique\u ptr b代码>而不是B代码>然后调用b=make(*a)代码>应该是:
class System{
public:
System() : a(make_A()), b(*a) {} // use initializer list for constructor
private:
// Fix order of members to initialize in correct order.
std::unique_ptr<A> a;
B b;
};
类系统{
公众:
System():a(make_a()),b(*a){}//为构造函数使用初始值设定项列表
私人:
//修正成员的顺序,以正确的顺序初始化。
std::唯一的ptr a;
B B;
};
b=b(*a)
应该重新初始化b
(注意,它的第一次初始化发生在输入构造函数之前),或者您可以重载=
操作符并执行相同的操作thing@AndyG-初始化在C++中有非常明确的含义,而<>代码> b= b(*a);<代码>不初始化b
-它分配给它。我编辑了一点问题。我编辑了问题,请看一看。创建了一个函数MakeAOrDefault
。这很有意义
System(){
a = make_A();
if(a==null)
a = make_default_A();
b(*a);
}
class System{
public:
System() : a(make_A()), b(*a) {} // use initializer list for constructor
private:
// Fix order of members to initialize in correct order.
std::unique_ptr<A> a;
B b;
};