c++中子对象的初始化可在复合类的构造函数的函数体内进行吗?还是子对象的初始化只能在初始化列表中进行?

严格意义上的子对象初始化只能在复合类的构造函数的初始化列表中进行。
作为变通,你可以在子对象所属的类中把真正执行初始化工作的代码写成一个普通公开成员函数,在复合类的构造函数体内调用这个函数。

class A{
    int data;
public:
    A(){}
    A(int d):data(d){}
    void init(int d){data=d;}
};

class B{
    A a;
public:
    B(int d):a(d)//常规方法,在初始化列表中初始化子对象
    {
    }
};

class C{
    A a;
public:
    C(int d)//变通方法,在函数体中初始化子对象
    {
        a.init(d);
    }
};
posted @   carbs  阅读(538)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示