首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >避免合成的初始化器列表的实现

避免合成的初始化器列表的实现
EN

Stack Overflow用户
提问于 2019-04-06 05:13:32
回答 1查看 35关注 0票数 1

我喜欢在A类和B类之间做一个组合-比方说,B类有一个A类型的成员。在初始化这个成员之前,需要一些计算和/或进一步的步骤,因为(A类的)构造函数的一个参数需要计算出来。因此,通过初始化器列表进行初始化是不利的。

使其工作的唯一方法是对(类B的)构造函数/初始化列表中的类型A的成员进行一些初步初始化,然后在获得参数后在构造函数中进一步覆盖该成员。

代码语言:javascript
复制
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))。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2019-04-06 05:35:02

使用委托构造函数:

代码语言:javascript
复制
class B{
private:
    A objA;
public:
    B() : B(compute_w()){}

private:
    B(int w) : A(w, w+1) {}
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55543453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档