c++ 關於類和構造函數

          上午直接在頭文件夾裏簡單的創建了一個類(照抄書上的),然後運行,發現報錯,然後就去google原因,看到好多都是說改project->properties->Link->system。然後我就照着改,但始終問題沒解決,毅然的重建一個項目,然後問題就沒了,只剩一個簡單的問題,發現需要改(類名.cpp)文件中對於的重構函數,否則可能會重複定義。

         總結下重構函數的一些知識點:

         1.類可以提供或不提供構造函數。

         2.只有當類一個構造函數也沒有時,編譯器纔會自動生成一個默認構造函數。

         3.類通常需要定義一個默認構造函數。只要類定義了一個帶參數的構造函數,就不會合成默認構造函數(形式爲:  類名();)。這樣只要是調用這個類就必須傳參數。

        4. 定義對象,與Java不同:

                c++:Obj  o=Obj();

                Java: Obj o=new Obj();

       5. 合成的默認構造函數的初始化:並不是按照數據成員的類型想當然的初始化爲相關類型的默認值。而是使用與變量初始化相同的規則類初始化成員的。像string,int等這樣的類類型會通過自己的默認構造函數初始化,而像指針、數組等這樣的複合類型成員,只有對象定義在全局作用域時才初始化爲0,局部定義的話就處於未定義狀態。此時有必要定義其它的構造函數來初始化指針、數組這樣的複合類型成員。

      6.構造函數不能聲明爲const。構造函數就是用來初始化對象的,對象不一定就是const的,所以沒有必要。

      7.像const和引用類型的成員不能由構造函數賦值初始化,如果沒有默認構造函數的初始化,就必須由構造函數初始化列表來進行初始化。

      8. 初始化中列表的順序跟成員定義順序不一致時,可能會有不理想的初始化,需要注意下。

      9. 如果定義了其它構造函數,並顯式定義默認構造函數,這個時候的構造函數的賦值不是初始化。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章