最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

C++基礎(chǔ)語(yǔ)法梳理:虛函數(shù)及其相關(guān)知識(shí)點(diǎn)

2021-09-11 17:01 作者:C語(yǔ)言編程__Plus  | 我要投稿

本期是C++基礎(chǔ)語(yǔ)法分享的第七節(jié),今天給大家來(lái)分享一下:

(1)虛析構(gòu)函數(shù);

(2)純虛函數(shù);

(3)虛函數(shù)、純虛函數(shù);

(4)虛函數(shù)指針、虛函數(shù)表;

(5)虛繼承;

(6)虛繼承、虛函數(shù);

(7)模板類、成員模板、虛函數(shù);

(8)抽象類、接口類、聚合類;


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

虛析構(gòu)函數(shù)是為了解決基類的指針指向派生類對(duì)象,并用基類的指針刪除派生類對(duì)象。

虛析構(gòu)函數(shù)使用

純虛函數(shù)

純虛函數(shù)是一種特殊的虛函數(shù),在基類中不能對(duì)虛函數(shù)給出有意義的實(shí)現(xiàn),而把它聲明為純虛函數(shù),它的實(shí)現(xiàn)留給該基類的派生類去做。

虛函數(shù)、純虛函數(shù)

類里如果聲明了虛函數(shù),這個(gè)函數(shù)是實(shí)現(xiàn)的,哪怕是空實(shí)現(xiàn),它的作用就是為了能讓這個(gè)函數(shù)在它的子類里面可以被覆蓋(override),這樣的話,編譯器就可以使用后期綁定來(lái)達(dá)到多態(tài)了。純虛函數(shù)只是一個(gè)接口,是個(gè)函數(shù)的聲明而已,它要留到子類里去實(shí)現(xiàn)。

虛函數(shù)在子類里面可以不重寫;但純虛函數(shù)必須在子類實(shí)現(xiàn)才可以實(shí)例化子類。

虛函數(shù)的類用于 “實(shí)作繼承”,繼承接口的同時(shí)也繼承了父類的實(shí)現(xiàn)。純虛函數(shù)關(guān)注的是接口的統(tǒng)一性,實(shí)現(xiàn)由子類完成。

帶純虛函數(shù)的類叫抽象類,這種類不能直接生成對(duì)象,而只有被繼承,并重寫其虛函數(shù)后,才能使用。抽象類被繼承后,子類可以繼續(xù)是抽象類,也可以是普通類。

虛基類是虛繼承中的基類,暫不做詳細(xì)說(shuō)明。

虛函數(shù)指針、虛函數(shù)表

虛函數(shù)指針:在含有虛函數(shù)類的對(duì)象中,指向虛函數(shù)表,在運(yùn)行時(shí)確定。

虛函數(shù)表:在程序只讀數(shù)據(jù)段,存放虛函數(shù)指針,如果派生類實(shí)現(xiàn)了基類的某個(gè)虛函數(shù),則在虛表中覆蓋原本基類的那個(gè)虛函數(shù)指針,在編譯時(shí)根據(jù)類的聲明創(chuàng)建。

虛繼承

虛繼承用于解決多繼承條件下的菱形繼承問(wèn)題(浪費(fèi)存儲(chǔ)空間、存在二義性)。

底層實(shí)現(xiàn)原理與編譯器相關(guān),一般通過(guò)虛基類指針虛基類表實(shí)現(xiàn),每個(gè)虛繼承的子類都有一個(gè)虛基類指針(占用一個(gè)指針的存儲(chǔ)空間,4字節(jié))和虛基類表(不占用類對(duì)象的存儲(chǔ)空間)(需要強(qiáng)調(diào)的是,虛基類依舊會(huì)在子類里面存在拷貝,只是僅僅最多存在一份而已,并不是不在子類里面了);當(dāng)虛繼承的子類被當(dāng)做父類繼承時(shí),虛基類指針也會(huì)被繼承。

實(shí)際上,vbptr 指的是虛基類表指針(virtual base table pointer),該指針指向了一個(gè)虛基類表(virtual table),虛表中記錄了虛基類與本類的偏移地址;通過(guò)偏移地址,這樣就找到了虛基類成員,而虛繼承也不用像普通多繼承那樣維持著公共基類(虛基類)的兩份同樣的拷貝,節(jié)省了存儲(chǔ)空間。

虛繼承、虛函數(shù)

相同之處:都利用了虛指針(均占用類的存儲(chǔ)空間)和虛表(均不占用類的存儲(chǔ)空間)

不同之處:

虛繼承

(1)虛基類依舊存在繼承類中,只占用存儲(chǔ)空間

(2)虛基類表存儲(chǔ)的是虛基類相對(duì)直接繼承類的偏移

虛函數(shù)

(1)虛函數(shù)不占用存儲(chǔ)空間

(2)虛函數(shù)表存儲(chǔ)的是虛函數(shù)地址

模板類、成員模板、虛函數(shù)

模板類中可以使用虛函數(shù)

一個(gè)類(無(wú)論是普通類還是類模板)的成員模板(本身是模板的成員函數(shù))不能是虛函數(shù)

抽象類、接口類、聚合類

抽象類:含有純虛函數(shù)的類

接口類:僅含有純虛函數(shù)的抽象類

聚合類:用戶可以直接訪問(wèn)其成員,并且具有特殊的初始化語(yǔ)法形式。滿足如下特點(diǎn):

(1)所有成員都是 public

(2)沒(méi)有定義任何構(gòu)造函數(shù)

(3)沒(méi)有類內(nèi)初始化

(4)沒(méi)有基類,也沒(méi)有 virtual 函數(shù)

今天的分享就到這里了,大家要好好學(xué)C++喲~

寫在最后:對(duì)于準(zhǔn)備學(xué)習(xí)C/C++編程的小伙伴,如果你想更好的提升你的編程核心能力(內(nèi)功)不妨從現(xiàn)在開(kāi)始!

微信公眾號(hào):C語(yǔ)言編程學(xué)習(xí)基地

整理分享(多年學(xué)習(xí)的源碼、項(xiàng)目實(shí)戰(zhàn)視頻、項(xiàng)目筆記,基礎(chǔ)入門教程)

歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長(zhǎng)比自己琢磨更快哦!



C++基礎(chǔ)語(yǔ)法梳理:虛函數(shù)及其相關(guān)知識(shí)點(diǎn)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
孙吴县| 蓬溪县| 福鼎市| 安塞县| 大新县| 南皮县| 淳化县| 闵行区| 扬中市| 淮滨县| 河北省| 禹城市| 攀枝花市| 运城市| 梓潼县| 满城县| 宁国市| 长海县| 南平市| 井陉县| 绥中县| 石景山区| 大埔县| 黔西| 新乐市| 剑阁县| 铁力市| 嘉义市| 南京市| 安新县| 青岛市| 余干县| 辰溪县| 崇文区| 舟山市| 常山县| 安宁市| 宽城| 仪陇县| 马公市| 池州市|