关于使用C++的成员初始化列表

   

  • 只有比别人更早、更勤奋地努力,才能尝到成功的滋味

初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段。它位于参数列表的右括号之后,函数体的左括号之前。

class Animal
{
public:
    Animal(int age);
    ~Animal();

    void setAge(int age);
    int getAge() const;
private:
    const int m_age;
    int m_weight;
    int m_height;
};

Animal::Animal(int age)
{
   m_age = age;    // error
   m_weight = 10;
   m_height = 5;
}

因为从概念上将,调用构造函数的时候,对象将在括号中的代码执行之前被创建。因此,调用Animal(int age)构造函数将导致程序首先给3个成员变量分配内存。然后,程序流程进入到括号中,使用常规的赋值方式将值存储到内存中。因此,对于const成员,必须在执行到构造函数体之前,进行数据成员的初始化。针对这个情况,C++提供了成员初始化列表。

Animal::Animal(int age) : m_age(age)  // initialize m_age
{
  m_weight = 10;
  m_height = 5;
}

只有构造函数可以使用这种初始化列表语法。此外,对于被声明为引用的类成员,也必须使用这种语法。如Animal & location;也应当使用。这是因为引用于const数据类似,只能在被创建时进行初始化。对于简单的数据成员,使用成员初始化列表与在函数体中使用赋值没有什么区别。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值