那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一文詳解虛函數及其相關知識點

C語言編程學習基地 ? 來源:C語言編程學習基地 ? 作者: C語言編程 ? 2021-10-13 10:14 ? 次閱讀

本期是C++基礎語法分享的第七節,今天給大家來分享一下:

(1)虛析構函數;

(2)純虛函數;

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

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

(5)虛繼承;

(6)虛繼承、虛函數;

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

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

虛析構函數

虛析構函數是為了解決基類的指針指向派生類對象,并用基類的指針刪除派生類對象。

虛析構函數使用

class Shape{public: Shape(); // 構造函數不能是虛函數 virtual double calcArea(); virtual ~Shape(); // 虛析構函數};class Circle : public Shape // 圓形類{public: virtual double calcArea(); 。。。};int main(){ Shape * shape1 = new Circle(4.0); shape1-》calcArea(); delete shape1; // 因為Shape有虛析構函數,所以delete釋放內存時,先調用子類析構函數,再調用基類析構函數,防止內存泄漏。 shape1 = NULL; return 0;}

純虛函數

純虛函數是一種特殊的虛函數,在基類中不能對虛函數給出有意義的實現,而把它聲明為純虛函數,它的實現留給該基類的派生類去做。

virtual int A() = 0;

虛函數、純虛函數

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

虛函數在子類里面可以不重寫;但純虛函數必須在子類實現才可以實例化子類。

虛函數的類用于 “實作繼承”,繼承接口的同時也繼承了父類的實現。純虛函數關注的是接口的統一性,實現由子類完成。

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

虛基類是虛繼承中的基類,暫不做詳細說明。

虛函數指針、虛函數表

虛函數指針:在含有虛函數類的對象中,指向虛函數表,在運行時確定。

虛函數表:在程序只讀數據段,存放虛函數指針,如果派生類實現了基類的某個虛函數,則在虛表中覆蓋原本基類的那個虛函數指針,在編譯時根據類的聲明創建。

虛繼承

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

底層實現原理與編譯器相關,一般通過虛基類指針和虛基類表實現,每個虛繼承的子類都有一個虛基類指針(占用一個指針的存儲空間,4字節)和虛基類表(不占用類對象的存儲空間)(需要強調的是,虛基類依舊會在子類里面存在拷貝,只是僅僅最多存在一份而已,并不是不在子類里面了);當虛繼承的子類被當做父類繼承時,虛基類指針也會被繼承。

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

虛繼承、虛函數

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

不同之處:

虛繼承

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

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

虛函數

(1)虛函數不占用存儲空間

(2)虛函數表存儲的是虛函數地址

模板類、成員模板、虛函數

模板類中可以使用虛函數

一個類(無論是普通類還是類模板)的成員模板(本身是模板的成員函數)不能是虛函數

抽象類、接口類、聚合類

抽象類:含有純虛函數的類

接口類:僅含有純虛函數的抽象類

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

(1)所有成員都是 public

(2)沒有定義任何構造函數

(3)沒有類內初始化

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

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

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Virtual
    +關注

    關注

    0

    文章

    23

    瀏覽量

    12289
  • 函數
    +關注

    關注

    3

    文章

    4346

    瀏覽量

    62972
  • 指針
    +關注

    關注

    1

    文章

    481

    瀏覽量

    70609

原文標題:C++基礎語法梳理:虛函數及其相關知識點

文章出處:【微信號:cyuyanxuexi,微信公眾號:C語言編程學習基地】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Docker-鏡像的分層-busybox鏡像制作

    docker hub里面查看busybox的Dockerfile, 知識點4:bootfs 和 rootfs? 知識點5:為什么Docker鏡像要采用這種分層結構? 如果多個容器共享份基礎鏡像,當某個
    的頭像 發表于 01-15 10:44 ?132次閱讀
    Docker-鏡像的分層-busybox鏡像制作

    Aigtek功率放大器應用:電感線圈的知識點分享

    電磁驅動是功率放大器的大基礎應用領域,其中我們最常見的就是用功放來驅動電感線圈,那么關于電感線圈的這10大知識點你都知道嗎?今天Aigtek安泰電子來給大家介紹下電感線圈的基礎知識
    的頭像 發表于 01-07 15:43 ?164次閱讀
    Aigtek功率放大器應用:電感線圈的<b class='flag-5'>知識點</b>分享

    芯片良率相關知識點詳解

    芯片良率(或成品率)是指在芯片制造過程中,從片晶圓上生產出的芯片中,能正常工作的比例,即合格芯片數量與總芯片數量的比率。良率的高低反映了生產工藝的成熟度、設備的精度和穩定性、材料質量以及設計合理性
    的頭像 發表于 12-30 10:42 ?532次閱讀
    芯片良率<b class='flag-5'>相關</b><b class='flag-5'>知識點</b><b class='flag-5'>詳解</b>

    詳解信號的回流路徑

    最近在看JT大佬出的本高速PCB設計書籍,看到回流路徑這里,讓我想到最近兩個群里都提到關于這個知識點的問題。書籍很好,但是也會有些疑問,帶著這些疑問我也查找了相關資料,我想著盡可能
    的頭像 發表于 12-25 10:17 ?603次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>詳解</b>信號的回流路徑

    后悔沒有早點看到:天線設計中的知識點

    Cat.1 bis R13架構,天線架構精簡為單天線架構,去掉了分集接收天線,因此只需要根天線。 ? 知識點: Cat.1 bis相對于Cat.1的區別是,后者為兩根天線(根主天線,
    的頭像 發表于 12-24 17:11 ?502次閱讀
    后悔沒有早點看到:天線設計中的<b class='flag-5'>知識點</b>!

    單片機中斷相關知識點

    ,中斷可以讓單片機在多個任務之間切換,為每個任務分配定的處理時間,從而提高資源的利用效率。1.2行業現狀1.2.1應用現狀(1)嵌入式系統:中斷機制是嵌入式系統中提升系統效率與響應能力的關鍵技術。它
    發表于 11-30 09:49

    常用SQL函數及其用法

    的 SQL 函數及其用法: 、聚合函數(Aggregate Functions) 聚合函數
    的頭像 發表于 11-19 10:18 ?432次閱讀

    接口測試理論、疑問收錄與擴展相關知識點

    本文章使用王者榮耀游戲接口、企業微信接口的展示結合理論知識,講解什么是接口測試、接口測試理論、疑問收錄與擴展相關知識點知識學院,快來起看
    的頭像 發表于 11-15 09:12 ?389次閱讀
    接口測試理論、疑問收錄與擴展<b class='flag-5'>相關</b><b class='flag-5'>知識點</b>

    智慧公交是什么?帶你詳解智慧公交的解決方案!

    智慧公交是什么?帶你詳解智慧公交的解決方案!
    的頭像 發表于 11-05 12:26 ?420次閱讀
    智慧公交是什么?<b class='flag-5'>一</b><b class='flag-5'>文</b>帶你<b class='flag-5'>詳解</b>智慧公交的解決方案!

    CPK為什么要大于1.33?詳解CPK計算

    原文標題:CPK為什么要大于1.33?詳解CPK計算
    的頭像 發表于 11-01 11:08 ?509次閱讀

    合宙LuatOS應用,與時間相關那些事

    ()函數了。 接下來,我會講些與這個函數以及其他時間函數相關知識
    的頭像 發表于 09-25 07:25 ?360次閱讀
    合宙LuatOS應用,與時間<b class='flag-5'>相關</b>那些事

    模擬電子技術知識點問題總結概覽

    給大家分享模擬電子技術知識點問題總結。
    的頭像 發表于 05-08 15:16 ?1237次閱讀
    模擬電子技術<b class='flag-5'>知識點</b>問題總結概覽

    解讀PSpice中的收斂性問題及其相關因素

    的收斂性問題及其與之相關因素,希望對各位有所幫助,文章如有未詳盡表述清楚的地方,請指正。在PSpice中進行電路仿真時,常會遇到仿真不收斂的問題(簡稱收斂性問題)。當
    的頭像 發表于 04-13 08:12 ?2179次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b>解讀PSpice中的收斂性問題<b class='flag-5'>及其</b><b class='flag-5'>相關</b>因素

    篇搞定DCS系統相關知識點

    目標。DCS系統廣泛應用于各個行業,如化工、電力、制藥等。在這些行業中,DCS系統可以實現對生產過程的集中監控和分散控制,提高生產效率和產品質量,降低能耗和減少環境污染,從而保證產品質量,并確保生產過程的安全可靠。 二.DCS系統知識點
    的頭像 發表于 03-26 18:40 ?1000次閱讀
    <b class='flag-5'>一</b>篇搞定DCS系統<b class='flag-5'>相關</b><b class='flag-5'>知識點</b>

    【量子計算機重構未來 | 閱讀體驗】第二章關鍵知識點

    本帖最后由 oxlm_1 于 2024-3-6 23:20 編輯 之所以將第二章單獨拿出來,是因為在閱讀過程中,發現第二章知識點較多,理解起來比較耗時間。 第二章的主要知識點: 量子
    發表于 03-06 23:17
    破解百家乐官网真人游戏| 百家乐官网如何计牌| 免费百家乐官网追号软件| 澳门百家乐赌场娱乐网规则| 网络百家乐官网电脑| 至尊百家乐官网贺一航| 澳门顶级赌场金沙| 破解百家乐打路单| 澳门百家乐官网秘积| 德州扑克怎么玩的| 百家乐发牌牌规| 百家乐官网资深 | 全讯网777| 百家乐五湖四海娱乐城| 钱隆百家乐官网破解版| 百家乐官网视频打牌| 棋牌游戏平台排行榜| 怎样玩百家乐的玩法技巧和规则| 娱乐城百家乐官网的玩法技巧和规则 | 百家博娱乐城| 线上百家乐怎么玩| 百家乐视频游戏挖坑| 24向山九宫格图| 百家乐官网桌码合| 百家乐官网的路怎样看| 金樽国际娱乐| 娱乐城注册送| bet365取消提款| 大三巴百家乐的玩法技巧和规则| 百家乐金海岸软件| 百家乐斗地主在哪玩| 凤凰娱乐开户| 百家乐太阳城| 科尔| 凯旋门百家乐官网技巧| 百家乐官网二号博彩正网| 网上百家乐官网投注法| 百家乐官网单注技巧| 开封县| 百家乐官网有多少网址| 澳门百家乐官网怎样下注|