c++之多態

(一)多態的定義:

接口多種不同的實現方式,稱爲多態

基類指針指向基類對象時,就是使用基類的成員變量和函數

基類指針指向派生類對象時,就是使用派生類的成員變量

這樣,基類指針可以按照多種形式來表現,這就叫做多態


(二)指針與引用

1)在多態的情況下,引用不如指針方便

2)引用只能指定固定的對象,不能修改,而指針可以指向任意的方向


(三)多態形成的三個必要條件

1)必須存在繼承關係

2)繼承中必須有同名的虛函數(重寫),有遮蔽關係

3)有基類的指針,通過基類指針來調用虛函數


(四)靜態聯編和動態聯編

1)聯編是指一個程序模塊、代碼之間互相關聯的過程。
2)靜態聯編(static binding),是程序的匹配、連接在編譯階段實現,也稱爲早期匹配。
    重載函數使用靜態聯編。
3)動態聯編是指程序聯編推遲到運行時進行,所以又稱爲晚期聯編(遲綁定)


(五)虛析構函數的必要性

創造基類的指針ps指向派生類地址的時候,在釋放地址pa的時候,只釋放基類的析構函數,不釋放派生類的析構函數,因爲pa是基類指針,只能釋放基類的析構

如果要是一起釋放基類和派生類,要把基類的析構函數設置成虛析構,這樣就可以繼承了


(六)構造函數中調用虛函數能否實現多態

構造的順序是先構造父類、再構造子類
  當調用父類的構造函數的時候,虛函數指針vfptr 指向父類的虛函數表
  當父類構造完,調用子類的構造函數的時候,虛函數指針 vfptr 指向子類的虛函數表
  結論:構造函數中無法實現多態


(七)不要用父類指針指向子類數組

指針也是一種數據類型,C++類對象的指針p++/--,仍然可用。
指針運算是按照指針所指的類型進行的。
父類p++與子類p++步長不同;不要混搭,不要用父類指針++方式操作子類對象數組


(八)純虛函數與抽象類

1純虛函數與抽象類



2抽象類:

1)含有純虛函數的類

2)抽象類不能用於直接創建對象實例,可以聲明抽象類的指針和引用

3)可使用指向抽象類的指針支持運行時多態性

4)派生類中必須實現基類中的純虛函數,否則它仍將被看作一個抽象類


3純虛函數

1)純虛函數沒有函數體,只有聲明;

2) = 0 知識一個形式,告訴編譯器這是個純虛函數

3)一個純虛函數,可以使類成爲抽象基類,但是抽象基類裏面除了包含純虛函數外,還可以包含其他的成員函數和變量

4)只有類中的虛函數才能聲明爲純虛函數,普通的成員函數和頂層函數不能聲明爲純虛函數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章