程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++ 初始化和賦值辨析

C++ 初始化和賦值辨析

編輯:C++入門知識

一、初始化 :用於為變量指定初始值,對於類而言,指的是構造函數。     備注:如果聲明中有初始化,那麼它其實是定義。       例如: 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類的實現,此時初始化操作就是構造函數,通常處理是申請內存後拷貝;而賦值不同,它是先施放原有內存後再申請新內存,最後拷貝。此時,套用專業術語來說,初始化就是構造函數,賦值就是重載=運算符。  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved