C++動態綁定及繼承

在C++中,通過基類的引用(或指針)調用虛函數,發生動態綁定。引用(或指針)既可以指向基類對象,也可以指向派生類對象。用引用(或指針)調用的虛函數在運行時確定,被調用的函數是引用(或指針)所指對象的實際類型所定義的。

除了構造函數,任意非static成員函數都可以是虛函數。保留字virtual只能在類內部的成員函數聲明中出現,不能用在類定義體外部出現的函數定義上。

派生類中虛函數的聲明必須與基類中的定義方式相匹配,但有一個例外:返回對基類型的引用(或指針)的虛函數。

派生類重定義虛函數時,可以使用virtual保留字,但不是必須這樣做。

C++的函數調用默認不使用動態綁定,要觸發動態綁定,必須滿足兩個條件:

1.只有指定爲虛函數的成員函數才能進行動態綁定,成員函數默認爲非虛函數,非虛函數不進行動態綁定。

2.必須通過基類型的引用或指針進行函數調用。

友元關係不能繼承。如果基類被授予友元關係,則只有基類具有特殊訪問權限,該基類的派生類不能訪問授予友元關係的類。

構造函數和複製控制

1.派生類的合成默認構造函數除了初始化派生類的數據成員外,還需要初始化派生對象的基類部分,基類部分由基類的默認構造函數初始化。

2.一般的情況下,派生類應通過使用基類構造函數尊重基類的初始化意圖,而不是在派生類構造函數函數體中對這些成員賦值。

3.如果派生類顯式定義自己的複製構造函數或賦值操作符,則該定義將完全覆蓋默認定義。被繼承類的複製構造函數和賦值操作符負責對基類成分以及類自己的成員進行復制或賦值。

4.構造函數和複製控制成員不能繼承,每個類定義自己的構造函數和複製控制成員,所以構造函數不能定義爲虛函數,最好也不將賦值操作符定義爲虛函數,而析構函數應定義爲虛函數。


含有(或繼承)一個或多個純虛函數的類是抽象基類,除了作爲抽象基類的派生類的對像的組成部分,不能創建抽象類型的對象。

發佈了43 篇原創文章 · 獲贊 13 · 訪問量 30萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章