C++中的初始化參數列表
阿新 • • 發佈:2018-03-09
圖片 .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++中的初始化參數列表