原文地址:https://blog.csdn.net/pxl20171799/article/details/80103425
1、在c++中,当把一个类的对象作为另一个新类的数据成员时,定义格式为:
class X
{
类名1 成员名1;
类名2 成员名2;
其他成员;
}
2、如果一个类A的对象作为另一个类B的数据成员,则在类B的对象创建过程中,调用其构造函数的过程中,数据成员(类A的对象)会自动调用类A的构造函数。
但是应注意:
(1)初始化列表的方式调用构造函数
如果类A的构造函数为有参数时,则在程序中必须在类B的构造函数的括号后面加“:”,和被调用的类A的构造函数,且调 用类A的构造函数时的实参值必须来自类B的形参表中的形参,
例如对上面类X进行初始化时必须首先初始化其中的子对象,即必须首先调用这些子对象的构造函数,因此,类X的构造函数应定义为X::X(参数表0):成员1(参数表1),成员2(参数表2),成员n(参数表n){}
其中参数表1 提供初始化成员1所需的参数,参数表2提供初始化成员2所需的参数,以此类推,并且这几个参数表中的参数都是由参数表0提供的,另外,初始化X的其他成员所需要的数据也是由参数表0提供的。
(2)在构造新类的对象过程中,系统首先调用其子对象的构造函数去初始化子对象,然后才执行类X的自己的构造函数,初始化类中的非对象成员。对于同一类中的不同子对象,系统按照他们在类中的说明顺序调用相应的构造函数进行初始化,而不是按照初始化表的顺序进行初始化。