虛函數與多態性 純虛函數

來源:互聯網
上載者:User
 多態性(Polymorphism)

   指一個名字,多種語義;

   一個介面,多種方法

•  所謂多態性是指當不同的對象收到相同的訊息時,

   產生不同的動作。

• C++的多態性具體體現在 運行和編譯兩個方面:

   在程式運行時的多態性通過繼承和虛函數來體現;

   在程式編譯時間多態性體現在函數和運算子的重載上

 Ø   虛函數是在基類中冠以關鍵字 virtual 的成員函數。

     它提供了一種介面介面。

Ø 虛函數可以在一個或多個衍生類別中被重定義。 Ø 實現運行時多態的關鍵首先是要說明虛函數,

  必須用基類指標調用衍生類別的不同實現版本

虛函數的作用:

允許在衍生類別中對基類的虛函數重新定義。

Ø能用virtual聲明類的成員函數,只能用於類的繼承階層中。  

   不能將類外的普通函數(友員)和靜態成員函式宣告成虛函數。

   建構函式不能聲明為虛函數!

Ø 在衍生類別中重新定義虛函數,要求函數名、函數類型、函數參

    數個數和類型全部與基類的虛函數完全相同。

    否則不能實現多態性, 為函數重載.

Ø一個成員函數被聲明為虛函數後,在同一類族中的不能再定義  與該虛函數具有相同的參數和傳回型別的非virtual同名函數。 Ø 衍生類別中可以根據需要重新定義虛函數,保持虛函數特性;

   如果沒有對基類的虛函數重新定義,則衍生類別簡單地繼承其直  接基類的虛函數。

Ø在衍生類別中重新定義虛函數

  函數名、傳回型別、 參數個數、  參數類型和順序完全相同

  如果衍生類別中對虛函數定義不同的參數,就無法實現多態機制。

Ø在衍生類別中重載基類同名函數

     如果函數原型不同,僅函數名相同,丟失虛特性

    基類中的函數為 virtual void show() const,

    衍生類別中的函數為void show (),

Ø 建構函式不能是虛函數

     建立一個衍生類別對象時,必須從類層次的根開始,

     沿著繼承路徑逐個調用基類的建構函式

Ø 解構函式可以是虛函數

    虛解構函式用於指引 delete 運算子正確析構動態對象

 

l純虛函數的作用

    在基類中為其衍生類別保留一個函數的名字,

    以便衍生類別根據需要對它進行定義。

    作為介面而存在

l純虛函數不具備函數的功能,一般不能直接被調用。

從基類繼承來的純虛函數,在衍生類別中仍是虛函數。

l如果一個類中至少有一個純虛函數,那麼這個類被稱為抽象類別(abstract class)。

   抽象類別中不僅包括純虛函數,也可包括虛函數。

l抽象類別必須用作派生其他類的基類,而不能用於直接建立對象執行個體。

   但仍可使用指向抽象類別的指標支援運行時多態性。

l衍生類別中應重載基類中的純虛函數,否則它仍將被看作一個抽象類別。l抽象類別不能用作函數參數類型、函數傳回值類型或顯式轉換的類型。

   可以聲明抽象類別的指標和引用。

l由於抽象類別的解構函式可以被聲明為純虛函數。Ø虛函數和多態性使成員函數根據調用對象的類型產生不

   同的動作.

Ø 多態性特別適合於實現分層結構的軟體系統,

   便於對問題抽象時定義共性,實現時定義區別 .

(4) 抽象基類是本類族的公用介面。

    即從同一基類派生出的多個類有同一介面。

(5) 如果在基類聲明了虛函數,則在衍生類別中凡是與該函數有相同的函數名、函數類型、參數個數和類型的函數,均為虛函數。

 

聯繫我們

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