一、初始化 :用於為變量指定初始值,對於類而言,指的是構造函數。 備注:如果聲明中有初始化,那麼它其實是定義。 例如: externdouble pi = 0; 此時pi是定義,所以如果這樣用的話會出錯: extern double pi = 0; extern double pi = 1; // 2個extern且初始化 默認構造函數(default constructor):指可以“無需任何引數就可被調用者”,這樣的一個構造函數如果不是沒有任何參數,就是每個參數都有默認值。通常當你要定義對象數組時,就會需要一個默認構造函數。 拷貝構造函數(copy constructor):指以某個對象作為另一個同型對象的初值。它最重要的用途是用來定義以傳值的方式來傳遞和傳回對象,換就話說,pass-by-value就是調用拷貝構造函數的同義詞。 例子: class String { public: String(); // default constructor String(const String & rhs); // copy constructor public: String& operator=(const String& rhs) { if (this == &rhs) return *this; delete [] data; data = new char[strlen(rhs.data] + 1]; strcpy(data, rhs.data); retrun *this; } ... private: char *data; }; String s1; // 默認構造函數 String s2(s1); // 拷貝構造函數 String s3 = s2; // 拷貝構造函數 二、賦值:簡單地說,賦值發生在當你賦值時。 例如:int i= 0; // 這是初始化 i= 20; //這是賦值 賦值和初始化本質是不同的操作,賦值發生在為已初始化的對象賦予新值的時候,初始化發生對象初次獲得一個值的時候,或者說是在賦值外的所有地方,例如定義、函數返回、參數傳遞和捕獲異常時。 對於int和double這些內置類型來說,賦值和初始化的操作基本上是相同的,簡單的復制一些位而已。 但是對於用戶自定義類型,例如class而言,則是完全不同。實例請參見String類的實現,此時初始化操作就是構造函數,通常處理是申請內存後拷貝;而賦值不同,它是先施放原有內存後再申請新內存,最後拷貝。此時,套用專業術語來說,初始化就是構造函數,賦值就是重載=運算符。