C/C++筆記 --C++ 面向對象

1、虛函數
        定義虛函數的類稱爲多態類,編譯器會爲多態類自動生成一個虛函數表vtable。vtable是一個函數指針數組,用來描述每個類的虛函數地址。多太類同時還有一個指向虛函數表的指針,爲類的對象訪問虛函數。vtable中還應包含typeInfo的信息,用來做RTTI。派生類的vtable應該兼容其基類的vtable。只有通過傳派生類引用或指針的形式才能讓基類使用派生類的虛函數。
2、類的靜態成員
       靜態成員變量須在源文件中初始化,它由整個類的的所有對象共享。靜態成員函數指針,沒有this指針,不能直接使用類的成員變量。
3、四個自動產生的函數
     public inline函數:默認構造函數,默認析構函數,默認賦值函數,默認拷貝構造函數。
4、構造與析構函數。
        構造函數可以帶參數,通過初始化列表進行類數據成員的初始化,類的非靜態const數據成員和引用成員只能在類的初始化列表進行初始化。派生類可以在初始化列表中調用積累的構造函數以對積累的數據成員進行初始化。     對帶一個參數的構造函數的聲明處,用explict修飾,以免與類型轉換符引起歧義。析構函數和構造函數沒有返回值,析構函數還沒有參數。
       類對象的初始化順序,基類的構造函數->成員對象的構造函數,成員對象的構造函數調用按照其定義順序進行。在多重派生的類中,構造函數是遞歸進行的。構造函數的調用順序與初始化成員列表的順序無關。析構函數的順序與構造函數完全相反。
        非靜態局部變量在定義是進行構造函數調用,在生存域的結尾出析構銷燬。
        靜態局部變量在其定義出構造,若無默認構造函數,則自動初始化爲0;在main結束後析構。
         全局變量(靜態,非靜態變量,類的靜態成員),在main之前構造,main結束後析構,默認爲全0初始化。
        引用類型的對象,不調用構造與析構。
        動態創建的對象,在new時構造,delete時析構。
5、拷貝構造函數和拷貝賦值函數。
拷貝構造函數
        A::A(const A& other)  //other允許操作私有成員
拷貝賦值函數
       A& A::opertor=(const operator& other); //other允許操作私有成員
      a.判斷是否自身
       this == &other 
      b.賦值,對指針從新分配內存並賦新值
       c.返回*this
6。派生類的基本函數的實現注意
        基類的構造函數,析構函數,賦值函數都不能被派生類繼承。所以在寫派生類是對這些函數應該注意:
        派生類的構造函數,應該顯示的調用(初始化列表)基類的構造函數。
       若基類是個多態類,那麼必須把基類的構造函數定義爲虛函數,這樣派生類的析構函數也是虛函數(最好顯示聲明,便於閱讀理解),以免對造成內存泄漏。
       派生類寫賦值函數的時候,不要忘記對基類的數據成員也要重新賦值,可以通過調用基類的賦值函數來實現。
發佈了34 篇原創文章 · 獲贊 1 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章