0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一文詳解虛函數(shù)及其相關(guān)知識(shí)點(diǎn)

C語(yǔ)言編程學(xué)習(xí)基地 ? 來(lái)源:C語(yǔ)言編程學(xué)習(xí)基地 ? 作者: C語(yǔ)言編程 ? 2021-10-13 10:14 ? 次閱讀

本期是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ù)使用

class Shape{public: Shape(); // 構(gòu)造函數(shù)不能是虛函數(shù) virtual double calcArea(); virtual ~Shape(); // 虛析構(gòu)函數(shù)};class Circle : public Shape // 圓形類{public: virtual double calcArea(); 。。。};int main(){ Shape * shape1 = new Circle(4.0); shape1-》calcArea(); delete shape1; // 因?yàn)镾hape有虛析構(gòu)函數(shù),所以delete釋放內(nèi)存時(shí),先調(diào)用子類析構(gòu)函數(shù),再調(diào)用基類析構(gòu)函數(shù),防止內(nèi)存泄漏。 shape1 = NULL; return 0;}

純虛函數(shù)

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

virtual int A() = 0;

虛函數(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)沒有定義任何構(gòu)造函數(shù)

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

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

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

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Virtual
    +關(guān)注

    關(guān)注

    0

    文章

    23

    瀏覽量

    12231
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4260

    瀏覽量

    62228
  • 指針
    +關(guān)注

    關(guān)注

    1

    文章

    475

    瀏覽量

    70477

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

文章出處:【微信號(hào):cyuyanxuexi,微信公眾號(hào):C語(yǔ)言編程學(xué)習(xí)基地】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    模擬電子技術(shù)知識(shí)點(diǎn)問(wèn)題總結(jié)概覽

    給大家分享模擬電子技術(shù)知識(shí)點(diǎn)問(wèn)題總結(jié)。
    的頭像 發(fā)表于 05-08 15:16 ?1036次閱讀
    模擬電子技術(shù)<b class='flag-5'>知識(shí)點(diǎn)</b>問(wèn)題總結(jié)概覽

    篇搞定DCS系統(tǒng)相關(guān)知識(shí)點(diǎn)

    目標(biāo)。DCS系統(tǒng)廣泛應(yīng)用于各個(gè)行業(yè),如化工、電力、制藥等。在這些行業(yè)中,DCS系統(tǒng)可以實(shí)現(xiàn)對(duì)生產(chǎn)過(guò)程的集中監(jiān)控和分散控制,提高生產(chǎn)效率和產(chǎn)品質(zhì)量,降低能耗和減少環(huán)境污染,從而保證產(chǎn)品質(zhì)量,并確保生產(chǎn)過(guò)程的安全可靠。 二.DCS系統(tǒng)知識(shí)點(diǎn)
    的頭像 發(fā)表于 03-26 18:40 ?717次閱讀
    <b class='flag-5'>一</b>篇搞定DCS系統(tǒng)<b class='flag-5'>相關(guān)</b><b class='flag-5'>知識(shí)點(diǎn)</b>

    淺談初級(jí)電工必備知識(shí)點(diǎn)

    對(duì)于初學(xué)電工的朋友來(lái)說(shuō),掌握些基礎(chǔ)且實(shí)用的知識(shí)點(diǎn)是非常重要的。本文旨在分享初級(jí)電工應(yīng)該掌握的核心知識(shí),幫助新手電工更好地入門和提升技能。
    的頭像 發(fā)表于 12-26 10:44 ?952次閱讀

    詳解pcb的組成和作用

    詳解pcb的組成和作用
    的頭像 發(fā)表于 12-18 10:48 ?1308次閱讀

    TCP協(xié)議面試常問(wèn)知識(shí)點(diǎn)總結(jié)

    TCP 作為傳輸層的協(xié)議,是個(gè)IT工程師素養(yǎng)的體現(xiàn),也是面試中經(jīng)常被問(wèn)到的知識(shí)點(diǎn)。在此,我將 TCP 核心的些問(wèn)題梳理了下,希望能幫到各位。
    的頭像 發(fā)表于 12-15 10:38 ?711次閱讀
    TCP協(xié)議面試常問(wèn)<b class='flag-5'>知識(shí)點(diǎn)</b>總結(jié)

    詳解pcb微帶線設(shè)計(jì)

    詳解pcb微帶線設(shè)計(jì)
    的頭像 發(fā)表于 12-14 10:38 ?2492次閱讀

    詳解pcb的msl等級(jí)

    詳解pcb的msl等級(jí)
    的頭像 發(fā)表于 12-13 16:52 ?8207次閱讀

    開關(guān)模式下的電源電流如何檢測(cè)?這12個(gè)電路&amp;10個(gè)知識(shí)點(diǎn)講明白了

    開關(guān)模式下的電源電流如何檢測(cè)?這12個(gè)電路&10個(gè)知識(shí)點(diǎn)講明白了
    的頭像 發(fā)表于 12-06 16:04 ?718次閱讀
    開關(guān)模式下的電源電流如何檢測(cè)?這12個(gè)電路&amp;10個(gè)<b class='flag-5'>知識(shí)點(diǎn)</b>講明白了

    詳解pcb不良分析

    詳解pcb不良分析
    的頭像 發(fā)表于 11-29 17:12 ?1062次閱讀

    數(shù)字電位計(jì)知識(shí)點(diǎn)

    電子發(fā)燒友網(wǎng)站提供《數(shù)字電位計(jì)知識(shí)點(diǎn).pdf》資料免費(fèi)下載
    發(fā)表于 11-24 16:08 ?7次下載
    數(shù)字電位計(jì)<b class='flag-5'>知識(shí)點(diǎn)</b>

    三菱和西門子PLC輸入接線知識(shí)點(diǎn)

    三菱和西門子PLC輸入接線知識(shí)點(diǎn)
    的頭像 發(fā)表于 11-21 10:01 ?666次閱讀
    三菱和西門子PLC輸入接線<b class='flag-5'>知識(shí)點(diǎn)</b>

    OFDM技術(shù)知識(shí)點(diǎn)

    電子發(fā)燒友網(wǎng)站提供《OFDM技術(shù)知識(shí)點(diǎn).rar》資料免費(fèi)下載
    發(fā)表于 11-18 14:25 ?0次下載
    OFDM技術(shù)<b class='flag-5'>知識(shí)點(diǎn)</b>

    Linux文件系統(tǒng)知識(shí)點(diǎn)詳解

    今天浩道跟大家分享關(guān)于Linux文件及目錄屬性知識(shí)點(diǎn)的硬核干貨,可以說(shuō)只要你認(rèn)真看完這篇文章內(nèi)容,其相關(guān)知識(shí)點(diǎn)都不在話下,感興趣又想快速掌握的小伙伴們,可以收藏起來(lái)隨時(shí)查看!
    的頭像 發(fā)表于 11-02 09:29 ?597次閱讀
    Linux文件系統(tǒng)<b class='flag-5'>知識(shí)點(diǎn)</b><b class='flag-5'>詳解</b>

    51單片機(jī)的知識(shí)點(diǎn)

    電子發(fā)燒友網(wǎng)站提供《51單片機(jī)的知識(shí)點(diǎn).pdf》資料免費(fèi)下載
    發(fā)表于 11-01 17:32 ?2次下載

    詳解pcb地孔的作用

    詳解pcb地孔的作用
    的頭像 發(fā)表于 10-30 16:02 ?1453次閱讀