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

来源:互联网 发布:整装好还是基装好 知乎 编辑:程序博客网 时间:2024/06/05 14:16

   

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

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

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数据类似,只能在被创建时进行初始化。对于简单的数据成员,使用成员初始化列表与在函数体中使用赋值没有什么区别。


0 0
原创粉丝点击