C++类中定义对象初始化问题

教材中写道:创建类的对象时,如果这个类具有内嵌对象成员,那么各个内嵌对象的首先被自动创建(调用本类的构造函数时,首先对当前类中的对象初始化,然后对本类初始化)。对于本类中对象的初始化,应当把对象写在本类构造函数的初始化列表中,如果本类对象没有出现在初始化列表中,本类中的内嵌对象只能调用不带参数的构造方法被创建。

那么,假设我不把内嵌对象的初始化写在初始化列表中,而是在定义的时候,传递参数,调用内嵌对象的带参数的构造方法,这样不就是可以省略掉构造方法的初始化列表了吗?

int main()
{
	B b(15;//像这样定义b对象时,传递参数,调用带参数的构造函数
}

自己动手试了试,发现根本行不通,只能在main函数中定义对象时可以调用带参数的构造函数,而在类中,定义对象时(简单数据成员除外)不能传递参数:下面附上伪代码:

class B{
    public:
        //B(){};
        B(int a){
            x=a;
        };
    private:
        int x;
};
class A{
    public:
        A(){}
    private:
        B b(15);//再定义B类对象的时候直接传递参数,
                //没有定义在A类构造函数的初始化列表中
};
int main()
{
	A a;
	return 0;
}

这样是错误的,编译器报错
C++类中定义对象初始化问题_第1张图片
下面的是正确的书写方式:

class B{
    public:
        //B(){};
        B(int a){
            x=a;
        };
    private:
        int x;
};
class A{
    public:
        A():b(15){}//在本类的构造函数对内嵌对象初始化
    private:
        B b;//创建对象,只能调用不带参数的构造方法
};
int main()
{
	A a;
	return 0;
}

你可能感兴趣的:(C++)