構造函數的任務是初始化數據成員的,在類中,如果沒有顯示定義任何構造函數,編譯器將為我們創建一個構造函數,稱為合成的默認構造函數,合成的默認構造函數使用與變量初始化相同的規則來初始化成員。即當類中的數據成員沒有在構造函數中顯示初始化,將執行默認初始化:
1.對於內置類型(如int,double,char,bool等)和復合類型(數組,指針),定義任何函數體之外的內置類型或復合類型變量將被初始化0,對於函數體內的內置類型的對象,若沒有初始化,其值是未定義的。
2.具有類類型的成員通過運行各自的默認構造函數來進行初始化。
1 #include <iostream> 2 #include <cstdlib> 3 #include <string> 4 5 using namespace std; 6 7 class test{ 8 public: 9 bool a; 10 int b; 11 float c; 12 string s; 13 int *d; 14 int e[3]; 15 }; 16 test global_a; //定義在函數之外 17 int main() 18 { 19 test local_a; //定義在函數之內 20 system("pause"); 21 return 0; 22 }


如上可以,定義在函數體之內的內置類型和復合類型,其值均是未定義的,隨機的,而對於類類型string,自動執行其構造函數,初始化為空。
