成员对象在类中定义声明的顺序(不是构造函数的成员初始化列表的顺序),并且在宿主对象构造之前建立。
Class Date
{
Public:
Date();
void print();
~Date();
Private:
Int month;
Int day;
Int year;
};
Class Employee
{
Public:
Employee(const char * const, const char * const, const Date&, const Date &);
Void print() const;
~Employee();
Private:
Char firstName[25];
Char lastName[25];
Const Date birthDate;
Const Date hireDate;
};
Employee:Employee(const char * const first, const char * const last, const Date &dateOfBirth, t Date &dateOfHire)
:birthDate(dateOfBirth),
hireDate(dateOfHire)
{
………..
}
当构造Employee对象时,首先依次构造birthDate和hireDate对象,然后构造Employee对象,当析构函数调用时,根据构造顺序,放过来析构对象。
成员对象不一定需要显示的使用成员初始化器进行初始化。没有提供初始化器的时候,成员对象默认的构造函数会被隐式调用。(如果成员对象的类没有提供默认的构造函数,将产生一个编译错误),并可以用set函数进行函数重载,但这样相当于“双重初始化”。一次是成员对象在默认构造函数调用,另一次是在宿主对象的构造函数体重调用设置函数。所以应尽量通过成员初始化器显式的初始化成员对象。