第八章:多態性

來源:互聯網
上載者:User

標籤:

主要內容:

      1.多態性

      2.運算子多載

      3.虛函數

      4.純虛函數

      5.抽象類別

 

 

多態實現:

  --函數重載

  --運算子多載

  --虛函數

限制:有些運算子是不可重載的,重載基本是改變操作對象,有基本類型轉為user-defined類型。

實現機制:運算運算式==》運算子函數,運算對象==》運算子函數的實參

形式:1.重載為類成員函數,此時 參數個數=原運算元-1(後置++,--除外)

          2.重載為友元函數,此時  參數個數 = 原運算元個數,至少有一個使用者自訂類型的形參。

聲明形式:

        函數類型  operator 運算子(形參)

       {

        .....

       }

 運算子成員函數的設計:

  1.雙目運算子B

    oprd1 B oprd2

   若oprd1 是A類對象 則 oprd1 B oprd2 ==>> oprd1.operator B(oprd2)

   2.前置單目運算子U

    U oprd

    若oprd 為A類對象 ,U 被重載為A類的成員函數 則U oprd ==>> oprd.operator U() 

 3.後置單目運算子++、--

    oprd++ / oprd--

   若oprd為A類對象,++、--被重載為A類的成員函數,且具有一個int類型形參。則 oprd++ ==> oprd.operator++(0)

    為何要這樣設計呢???如果不明白,雖然現在看懂了,過後還是忘得?????

  運算子友元函數設計:

   1.雙目運算子B

     oprd1 B oprd2 ===> operator B(oprd1,oprd2)

    2.前置單目運算子B

    B oprd ===>operator B(oprd)

    3.後置單目運算子++、--

     oprd B ===>operator B(oprd,0)

    

 

靜態繫結與動態綁定

   1.綁定: 程式自身彼此關聯的過程,確定程式中的操作調用與執行該操作的代碼間的關係。

   2.靜態繫結(靜態聯編)

    編譯階段,用對象名或者類名來限定要調用的函數

    3.動態綁定

    運行階段,程式運行時確定將要調用的函數

還是不太明白靜態編譯和動態編譯的概念,到底是如何?動態編譯呢?????

 

 

虛函數:

 本質:不是重載聲明而是覆蓋

 調用方式:根據指標指向的對象的類,而不是指標本身的類型。

 

虛解構函式:

 虛技術與解構函式的合體,這樣可以用基類指標delete衍生類別得對象。

 

抽象類別

只要含有純虛函數的類就是抽象類別

class 類名

{

   virtual 類型 函數名(參數表)=0;/純虛函數

}

NOTE:

  抽象類別只能作為基類來使用

  不能聲明抽象類別的對象

  建構函式能是虛函數,解構函式可以是虛函數(????)

 

還有一個疑問:為何建構函式不具有繼承特性呢。解構函式呢?解構函式也不具有繼承特性。但可以有虛解構函式

 

第八章:多態性

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.