我喜欢在A类和B类之间做一个组合-比方说,B类有一个A类型的成员。在初始化这个成员之前,需要一些计算和/或进一步的步骤,因为(A类的)构造函数的一个参数需要计算出来。因此,通过初始化器列表进行初始化是不利的。
使其工作的唯一方法是对(类B的)构造函数/初始化列表中的类型A的成员进行一些初步初始化,然后在获得参数后在构造函数中进一步覆盖该成员。
class A{
private:
int a;
int b;
public:
A(int x, int y): a(x), b(y) {}
}
class B{
private:
A objA;
public:
B(){
// some necessary steps to get say variable int w
objA = new A(w, w+1); // late initialization causes compile error, as
// all members need to be init once entering Ctor
}我猜有一个比前面提到的更好的解决方案:双重初始化-首先在初始化列表中(例如通过B():objA(0,0)),然后根据需要(A(w,w+1))。谢谢!
发布于 2019-04-06 05:35:02
使用委托构造函数:
class B{
private:
A objA;
public:
B() : B(compute_w()){}
private:
B(int w) : A(w, w+1) {}
};https://stackoverflow.com/questions/55543453
复制相似问题