C++ - 構造函數

1、名字空間程序員

  一、名字空間的由來:因爲全局空間(即全局變量)用起來很是的方便,但若是過多的在全局空間定義變量,有很大的可能會引發重名。所以,C++就引入了名字空間的概念。數組

  二、名字空間的含義:名字空間就是爲了給程序員更好的管理變量,所以C++可將全局空間分紅一個個獨立空間,並給每一個獨立空間取不一樣的名字。這樣就能很大程度的保證,同一個名字空間的名字不重名,以防止衝突。函數

  三、若是兩個名字空間取相同的名字,那麼這兩個名字空間就會被合併成一個名字空間,所以在給名字空間取名字的時候要當心些。spa

  四、名字空間不只能夠定義變量,還能夠聲明函數,不過函數的定義要在名字空間外指針

  五、使用域限制符(::)能夠直接訪問名字空間的內容。 例如,名字空間::標示符,不過會有些麻煩。對象

      不過可使用using   namespace  名字空間;不過不建議使用在本身定義的名字空間,以避免發生變量、函數、類等的衝突。blog

  六、注意:不一樣的命名空間下的相同名字是不會構成重載的,相同做用域下的相同名字纔會構成重載。生命週期

2、類(class) 注:類就是class,class就是累資源

  一、C++中的class其實與C++中的struct結構體區別不大,但爲了區分C++與C,通常在C++中都使用class作用域

  二、C++中class與struct的一些區別在於,struct結構體中成員默認訪問屬性的是public公開的,而class類中成員默認訪問屬性的是private私有的。

3、class的構造函數

  一、在建立對象時自動調用的函數,在整個生命週期必定且只能調用一次。

  二、在構造函數中負責對成員變量進行初始化、分配資源、設置對象的初始狀態。

  三、構造函數能夠有多個版本,不一樣的構造函數之間不會構成重載,編譯器經過創造對象的方式和參數的設置來斷定選擇哪一個重載函數。

  四、若是沒有定義構造函數,編譯器會自動生成一個構造函數。若自定義構造函數,編譯器則不會生成構造函數

  五、通常來講,編譯器自動生成的構造函數都是夠用的,除非有成員是指針,指向額外的空間,這時候就須要自定義構造函數了

  六、通常狀況下,構造函數的有4個版本:a、無參構造函數  b、有參構造函數  c、拷貝構造函數  d、賦值構造函數  e、轉換構造函數

4、無參構造函數與有參構造函數

  一、無參構造函數指的是在建立類時,沒有參數傳遞。有參構造函數指的是在建立類時,有參數值傳遞。

  二、一旦構造了一個構造函數,編譯器就不會產生無參函數,因此在編輯時,最好多寫一個無參構造函數,以防止建立對象出錯。

  三、在自定義有參構造函數時能夠默認參數,所以有能夠在建立類時沒有參數傳遞給構建函數,所以有能夠出現衝突。(編譯器不知道選擇調用無參函數仍是有參函數)。

         

  四、有參構造的調用:

       a、直接調用,建立類時不給參數;例如   Student   stu  =  new  Student;

       b、建立數組對象時,每一個對象都會調用一次無參構造

       c、若是累A中有類B,那麼在執行類A時,執行到類B的建立時,會自動調用無參構造

       d、在類A中調用類B的有參構造:類A(參數列表):類B(參數列表)

5、拷貝構造函數

  一、拷貝構造函數是一種特殊的構造函數,就是以一種已有的對象去構造同類的副本對象,跟克隆同樣。

    

  二、自定義拷貝構造函數:

      a、申請所需的空間

      b、拷貝賦值

  三、拷貝構造函數的調用:

      a、對象與對象賦值

      b、用對象與函數的傳參

      c、用對象當作返回值

      d、類A中有類B時,類A在執行拷貝構造函數時,會自動調用類B的拷貝構造函數

6、賦值構造函數  

  一、賦值構造就是給一個已經建立過的對象賦值上另外一個已經建立過的對象。

    

  二、自定義賦值構造函數的步驟:a、肯定賦值構造函數的類型  

                  b、防止自賦值

                  c、釋放舊資源

                  d、調用拷貝構造函數或者直接寫拷貝函數的步驟

  三、賦值構造與拷貝構造的區別:

      賦值構造函數:對象A與對象B都已生成;B = A

      拷貝構造函數:使用已有的對象A去創造對象B(調用時的對象B還未生成)

6、轉換構造函數

  一、用一個數據給對象初始化,默認會自動調用構造函數,達到類型轉換效果。

  二、編譯器默認會實現自動類型轉換構造函數。

相關文章
相關標籤/搜索