1. 程式人生 > >C++中的初始化參數列表

C++中的初始化參數列表

圖片 .com 包含 自然 cout csharp pan 初始化列表 arp

c++中以下幾種情況的變量的初始化不可以寫在構造函數裏,而是要寫在初始化參數列表中

1.const常量

class AA
{
public :
    const int num;
public :
    AA():num(123)//在初始化列表裏初始化const常量
    {


    }
};
int main()
{
    AA aa;
    cout<<aa.num<<endl;
    return 0;
}

2.引用

class AA
{
public :
    int &num;
    int b;
public :
    AA():num(b),b(123)//在初始化列表裏初始化引用
    {


    }
};
int main()
{
    AA aa;
    cout<<aa.num<<endl;
    return 0;
}

3.包含另一個類的對象且該類的構造函數是自定義的

class AA
{
public :
    AA(int x)
    {

       cout<<"AA";
    }
};
class BB
{
public :
    AA aa;
public:
    BB():aa(123)//在初始化列表裏初始化另一個類
    {
        cout<<"BB";
    }
};

  特別的,我們來看一下下面這種情況:

class AA
{
public :
    int a;
    int b;
public :
    AA(int x):b(x),a(b)
    {


    }
};
int main()
{
    AA aa(100);
    cout<<aa.a<<endl;
    cout<<aa.b<<endl;
    return 0;
}

技術分享圖片

我們會發現a的結果是有問題的,這是為什麽呢?

原因就是我們是先定義a的,自然在這姓的時候就先執行a的賦值,即將b的值賦予a,但此時b還沒有值,所以結果只會輸出b的值,我們可以通過以下兩種方式改正

1.調整變量的定義順序

public :
    int b;
    int a;
public :
    AA(int x):b(x),a(b)
    {


    }

2.調整賦值順序

public :
    int a;
    int b;

public :
    AA(int x):b(a),a(x)
    {


    }

  

  

C++中的初始化參數列表