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.成员初始化的次序

构造函数初始化列表仅指定用于对初始化成员的值,并不指定这些初始化执行的次序。成员被初始化的次序就是定义成员的次序。第一个成员首先被初始化,然后是第二个,以此类推。
如:
class X{
     int i;
     int j;
public:
     X(int val):j(val), i(j)<span style="font-family: Arial, Helvetica, sans-serif;">{}</span>
}
在这种情况下,由于i的定义在j的前面,虽然初始化列表中j(val)写在前面,但是却是先执行i(j);因此初始化后不能达到预期的效果。改成这样:
X(int val):j(val), i(val)
或者
X(int val):i(val), j(i)






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值