C++物件導向(學習筆記)

來源:互聯網
上載者:User

1. 多態:
   即基類的指標或者引用可以直接操作或引用其任何派生子類的能力,
使得基類在運行時可以表現為更多類類型的資料對象,這個類似於C中的
void * 資料結構可以匹配任意資料類型的指標功能相似.
 
 1) private    聲明的資料衍生類別不可訪問,需要聲明為友元才能訪問 ,即在基類中聲明 friend class 衍生類別
 2) protected  聲明的資料衍生類別可以訪問,外部資料不可以直接存取.
 
 3) 設計基類的時候,與類型相關的成員函數需要設計為虛函數.

 4) 基類的函數不可以在衍生類別中重載,需要用using 基類::介面 來實現將基類的重載函數集載入到衍生類別中,實現重載.

 5)虛函數與純虛函數(抽象類別)
    虛函數:       virtual void p(void);     基類需要實現,即便實現為空白函數
    純虛函數:     virtual void p(void) = 0; 基類不需要實現,包含純虛函數的類稱為抽象基類,不可以直接被執行個體化,需要在衍生類別中實現.

2. 繼承
   虛擬繼承: class a: virtual public b{}; a虛擬繼承b, 虛擬繼承的基類優先構造

3. 封裝
   在程式上,隱藏對象的屬性和實現細節,僅對外公開介面,控制在程式中屬性的讀和修改的存取層級;
將抽象得到的資料和行為(或功能)相結合,形成一個有機的整體,也就是將資料與操作資料的原始碼
進行有機的結合,形成“類”,其中資料和函數都是類的成員.

4. 抽象
   把同類事物的根本的,本質的,相同的,不變的概括出來就叫抽象.

 

5. 異常
a) try,throw,catch
  try{
      throw 類建構函式;
  }
  catch(類名){

  }

b) 異常規範與函數指標
   在函數或者函數指標聲明的時候指定異常規範,如:
   void pf(void) throw(string);          //pf函數可以拋出string的異常
   void (*pg)(void) throw(int, string);   //pg函數可以拋出int和string的異常

   *pg = &pf;  // pg的異常規範必須要比pf的嚴格,否則編譯錯誤

c) 衍生類別中虛函數的異常規範比基類的更嚴格.

6. 類的構造
  class a{};
  class b : public class a{};

   b b1;
   a a1 = b1;
 a) 調用a(a) 構造,即default copy construct方法
 b) 沒有虛方法時  bitwise copy
 c) 有虛方法時 bitwise copy失效,使用編譯成產生copy construct 方法
 d) 有虛繼承的時候 bitwise copy失效,使用編譯成產生copy construct 方法
 e)子類給父類賦值時 bitwise copy失效,使用編譯成產生copy construct 方法
 f) 右值為指標的賦值時bitwise copy失效說,使用編譯成產生copy construct 方法

補充:
--------------------------------------------
 foo()
 {
    //構造word
    return word;
 }                //返回之後需要調用copy construct

 和 foo(_result)
    {
       //構造_result
       return;
    }
 的效率區別.
-----------------------------------------------
-----------------------------------------------
  成員初始化列表(列表從右開始,列表的構造是安插到建構函式中的)
  word::word():a(b)
  {
   }              //直接調用a的建構函式
  與  word::word()
     {
        a = b;
      }              //先構造a,再建立b的臨時對象,再copy construct
  的效率區別
-----------------------------------------------

7. 繼承與虛擬繼承
  a) 沒有虛函數也沒有虛繼承的單一繼承        跟C一樣線性分布
  b) 沒有虛函數也沒有虛繼承的多繼承          跟C一樣線性分布
  c)有虛函數沒有虛繼承的單一繼承            跟C一樣線性分布(帶有虛函表)
  d)有虛函數沒有虛繼承的多繼承              跟C一樣線性分布(帶各父類的有虛函表)
  e) 既有虛函數也有虛繼承的單一繼承          不變局部和共用局部(虛繼承基類,通過編譯器在不變局部安插指標或者在虛函表指出offset)各部分線性布局
  f) 既有虛函數也有虛繼承的多繼承            不變局部和共用局部(虛繼承基類,通過編譯器在不變局部安插指標或者在虛函表指出offset)

類名::*               表示指向類成員member的類型
&類名::成員           成員在類中的offset
&類執行個體對象::成員     執行個體類成員在記憶體中的實際地址

8.構造

a) 沒有虛繼承的構造,base class object 的構造直接按順序插入帶衍生類別的construct裡面.
b) 汗有虛繼承的類都加一個if()條件來控制virtual base class的構造,只有第一次條件為真,後面的都為假

c) 在構造的過程中vptr要跟對應的class 對應,這就要求在構造的過程中會頻繁的初始化和設定vptr.

9. 運行時

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.