C++類構造函數初始化列表

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

類聲明

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數據成員必須使用這種語法,由於它們只能在建立時初始化

注意:不能將初始化列表語法用於其餘類方法。spa

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

Class MyClasscode

{it

  int mem1 = 0;class

  const int  mem2 = 2;構造函數

};語法

這與在構造函數中使用初始化列表語法等價。引用

 

成員初始化列表和構造函數體的區別

成員初始化列表和構造函數的函數體均可覺得咱們的類數據成員指定一些初值,可是二者在給成員指定初值的方式上是不一樣的。成員初始化列表使用初始化的方式來爲數據成員指定初值,而構造函數的函數體是經過賦值的方式來給數據成員指定初值。也就是說,成員初始化列表是在數據成員定義的同時賦初值,可是構造函的函數體是採用先定義後賦值的方式來作。這樣的區別就形成了,在有些場景下,是必需要使用成員初始化列表。

 

成員初始化列表的行爲

成員初始化列表是能夠初始化類的數據成員,那麼他是如何操做的呢?是經過一系列的函數調用麼,不是的。成員初始化列表是按照數據成員的聲明順序,將初始化操做安排在構造函數全部usercode的前面。成員初始化列表的初始化順序是按照類成員的聲明順序來的,因此在初始化的時候,儘可能不要用次序較後的成員來初始化次序較前的成員,這樣就會出問題,這也是成員初始化列表的一個弊端。

相關文章
相關標籤/搜索