欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報邀請碼778899分享:C++:虛函數(shù)與多態(tài)

柚子快報邀請碼778899分享:C++:虛函數(shù)與多態(tài)

http://yzkb.51969.com/

一、虛函數(shù)和多態(tài)

(1)虛函數(shù):

在類的定義中,前面有virtual關(guān)鍵字的成員函數(shù)就是虛函數(shù)

注意:virtual關(guān)鍵字只出現(xiàn)在類定義的函數(shù)聲明中,寫函數(shù)體時不用

(2)多態(tài)

Ⅰ.多態(tài)的表現(xiàn)形式:

1.指針

上面提到,派生類的對象可以賦給基類指針,那么當我們用這個指針調(diào)用一個基類和派生類中同名同參的虛函數(shù)時:

①若該指針指向的是一個基類的對象,那么被調(diào)用的會是基類的虛函數(shù)

②若該對象指向的是一個派生類的對象,那么被調(diào)用的會是派生類的虛函數(shù)

??????????????????????????????????????

2.引用

上面提到,派生類的對象可以賦給基類引用,那么當我們用這個引用調(diào)用一個基類和派生類中同名同參的虛函數(shù)時:

①若該引用的對象是一個基類的對象,那么被調(diào)用的會是基類的虛函數(shù)

②若該引用的對象是一個派生類的對象,那么被調(diào)用的會是派生類的虛函數(shù)

?????????????????????????????????????????????

Ⅱ.多態(tài)的作用

??在面向?qū)ο蟮某绦蛟O(shè)計中使用多態(tài),能夠增強程序的可擴充性,即程序需要修改或增加功能的時候,需要改動和增加的代碼較少。

??實戰(zhàn)案例:北京大學程序設(shè)計魔獸世界大作業(yè)

注意事項:

1.在非構(gòu)造函數(shù),非析構(gòu)函數(shù)的成員函數(shù)中調(diào)用虛函數(shù),是多態(tài)!(因為在編譯時并不會考慮構(gòu)造函數(shù)和析構(gòu)函數(shù)之外的函數(shù)調(diào)用)

2.在構(gòu)造函數(shù)和析構(gòu)函數(shù)中調(diào)用虛函數(shù),不是多態(tài)。編譯時即可確定,調(diào)用的函數(shù)是自己的類或基類中定義的函數(shù),不會等到運行時才決定調(diào)用自己的還是派生類的函數(shù)。

3.派生類中和基類中虛函數(shù)同名同參數(shù)表的函數(shù),不加virtual也自動成為虛函數(shù)

總的來說:“多態(tài)”的關(guān)鍵在于通過基類指針或引用調(diào)用一個虛函數(shù)時,編譯時不確定到底調(diào)用的是基類還是派生類的函數(shù),運行時才確定究竟調(diào)用哪個類下的函數(shù),這種機制被叫做“動態(tài)聯(lián)編”。

二、多態(tài)的實現(xiàn)原理

我們先來觀察兩個唯一區(qū)別在是否包含了虛函數(shù)的類的大小

?????????????????????????????????????????????????????????????????????????????????????????????????????????

發(fā)現(xiàn)含有虛函數(shù)的Base2會比不含虛函數(shù)的Base1多出8個字節(jié)

每一個有虛函數(shù)的類(或有虛函數(shù)的類的派生類)都有一個虛函數(shù)表,該類的任何對象中都放著虛函數(shù)表的指針。虛函數(shù)表中列出了該類的虛函數(shù)地址,多出來字節(jié)就是用來存放虛函數(shù)表的地址的。具體構(gòu)造如下:

多態(tài)的函數(shù)調(diào)用語句被編譯成一系列根據(jù)基類指針所指向的(或基類引用所引用的)對象中存放的虛函數(shù)表的地址,在虛函數(shù)表中查找虛函數(shù)地址,并調(diào)用虛函數(shù)的指令。

三、虛析構(gòu)函數(shù)

通過基類的指針刪除派生類對象時,通常情況下只會調(diào)用基類的析構(gòu)函數(shù)。

????????????????????????????????????????????????????????????

但是當我們刪除一個派生類的對象時,應(yīng)該先調(diào)用派生類的析構(gòu)函數(shù),然后調(diào)用基類的析構(gòu)函數(shù)。

這個時候我們就要人為地把基類的析構(gòu)函數(shù)聲明為virtual(派生類的析構(gòu)函數(shù)可以不聲明virtual),然后我們通過基類的指針刪除派生類對象時,就會先調(diào)用派生類的析構(gòu)函數(shù)再調(diào)用基類的析構(gòu)函數(shù)。

????????????????????????????????????????????????????????????

四、純虛函數(shù)和抽象類

(1)純虛函數(shù):帶有純說明符=0的虛函數(shù),目的是為純虛函數(shù)提供定義(若純虛函數(shù)是析構(gòu)函數(shù)那么必須提供定義).

?注意:此定義必須要類體內(nèi)部提供(函數(shù)聲明的語法不允許純說明符=0與函數(shù)體一起出現(xiàn))

2.抽象類:包含純虛函數(shù)的類叫做抽象類

注意:

①抽象類只能作為基類來派生新類使用,不能創(chuàng)建抽象類的對象

②抽象類的指針和引用可以指向由抽象類派生出來的類的對象

③在抽象類的成員函數(shù)內(nèi)可以調(diào)用純虛函數(shù),但是在構(gòu)造函數(shù)或析構(gòu)函數(shù)內(nèi)部不能調(diào)用純虛函數(shù)。

④如果一個類從抽象類派生而來,那么當且僅當它實現(xiàn)了基類中的所有純虛函數(shù),它才能成為非抽象類。

柚子快報邀請碼778899分享:C++:虛函數(shù)與多態(tài)

http://yzkb.51969.com/

文章來源

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://m.gantiao.com.cn/post/19590383.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機訪問

文章目錄