c++ 構造函數初始化表列

1. 標準構造函數

class IntCell{
public:
    IntCell(){
        storedValue = 0;
    }
    IntCell(int initialValue){
        storedValue = initialValue;
    }
    int read(){
        return storedValue;
    }
    void write(int x){
        storedValue = x;
    }

private:
    int storedValue;
};

跟java很相似。

2. 初始化表列

class IntCell{
public:
    IntCell(int initialValue=0):storedValue {initialValue} {}
    int read() const{
        return storedValue;
    }
    void write(int x){
        storedValue = x;
    }
private:
    int storedValue;
};

在函數體前使用了初始化表列(initializtion list),直接將數據成員初始化了。

// c++11
:storedValue{ initialValue}{}
// 老的寫法
:storedValue (initialValue){}

3. 舉個例子

二叉樹的定義,用初始化表列來定義很明顯的要短很多

struct TreeNode2 {
         int val;
         TreeNode2 *left;
         TreeNode2 *right;
         TreeNode2(int x) : val{x}, left{NULL}, right{NULL} {}
};
struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
int main(){
    TreeNode t1{1};
    cout<<t1.val<<endl;
    TreeNode2 t2{2};
    cout<<t2.val<<endl;

    return 0;
}

TreeNode用的c++11的語法。這語法還是挺實用的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章