C++类构造函数初始化列表

摘自《C++ Primer Plus》第6版12.7.1

类声明

class Quene  
{  
    private:  
        struct Node { int item; struct Node * next; };  
        enum { Q_SIZE = 10};  
        Node * front;  
        Node * rear;  
        int items;  
        const int qsize;  
    public:  
      
};  

构造函数初始化列表

以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。

Queue::Queue(int qs) : qsize(qs)
{
    front = rear = NULL;
    items = 0;
}

初始值可以是常值或构造函数参数,并且这种方法不限于初始化常量,也可以用于初始化其他成员。

Queue::Queue(int qs) : qsize(qs), front(NULL), rear(NULL), items(0)
{
}

 

只有构造函数可以使用初始化列表语法,另外,引用数据成员与const数据成员必须使用这种语法,因为它们只能在创建时初始化

注意:不能将初始化列表语法用于其他类方法。

c++11提供了更直观的方式进行初始化。

Class MyClass

{

  int mem1 = 0;

  const int  mem2 = 2;

};

这与在构造函数中使用初始化列表语法等价。

 

成员初始化列表和构造函数体的区别

成员初始化列表和构造函数的函数体都可以为我们的类数据成员指定一些初值,但是两者在给成员指定初值的方式上是不同的。成员初始化列表使用初始化的方式来为数据成员指定初值,而构造函数的函数体是通过赋值的方式来给数据成员指定初值。也就是说,成员初始化列表是在数据成员定义的同时赋初值,但是构造函的函数体是采用先定义后赋值的方式来做。这样的区别就造成了,在有些场景下,是必须要使用成员初始化列表。

 

成员初始化列表的行为

成员初始化列表是可以初始化类的数据成员,那么他是如何操作的呢?是通过一系列的函数调用么,不是的。成员初始化列表是按照数据成员的声明顺序,将初始化操作安排在构造函数所有usercode的前面。成员初始化列表的初始化顺序是按照类成员的声明顺序来的,所以在初始化的时候,尽量不要用次序较后的成员来初始化次序较前的成员,这样就会出问题,这也是成员初始化列表的一个弊端。

转载于:https://my.oschina.net/u/2326611/blog/1499567

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值