类
1.构造函数初始化式
从概念上讲,构造函数分两个阶段执行:1)初始化阶段(构造函数初始化列表);2)普通赋值计算阶段。计算阶段由构造函数体中的所有语句组成。
1.1构造函数初始化列表
有些成员必须在构造函数初始化列表中进行初始化。如:class ConstRef{ public: ConstRef(int ii); private: int i; const int ci; int &ri; }; ConstRef::ConstRef(int ii) { i = ii;//正确 ci = ii;//错误,因为ci是const的,不能赋值 ri = i;
注意:可以初始化const对象或引用类型的对象,但是不能对他们赋值。初始化const或引用类型的数据成员唯一机会是在构造函数初试化列表中。正确的方式应该是:ConstRef::ConstRef(int ii):i(ii), ci(i), ri(ii) {}
2.成员初始化的次序
构造函数初始化列表仅指定用于对初始化成员的值,并不指定这些初始化执行的次序。成员被初始化的次序就是定义成员的次序。第一个成员首先被初始化,然后是第二个,以此类推。如:在这种情况下,由于i的定义在j的前面,虽然初始化列表中j(val)写在前面,但是却是先执行i(j);因此初始化后不能达到预期的效果。改成这样:class X{ int i; int j; public: X(int val):j(val), i(j)<span style="font-family: Arial, Helvetica, sans-serif;">{}</span> }
X(int val):j(val), i(val) 或者 X(int val):i(val), j(i)