欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺析C++中的虛函數(shù)

 更新時間:2013年08月20日 10:00:38   作者:  
以下是對C++中的虛函數(shù)進行了詳細的分析介紹,需要的朋友可以過來參考下

一、定義
定義:在某基類中聲明為 virtual 并在一個或多個派生類中被重新定義的成員函數(shù)。

語法:virtual 函數(shù)返回類型函數(shù)名(參數(shù)表) { 函數(shù)體 }   

用途:實現(xiàn)多態(tài)性,通過指向派生類的基類指針,訪問派生類中同名覆蓋成員函數(shù)  虛函數(shù)必須是基類的非靜態(tài)成員函數(shù),其訪問權(quán)限可以是protected或public。

定義為virtual的函數(shù)是基類期待派生類重新定義的,基類希望派生類繼承的函數(shù)不能定義為虛函數(shù)。

二、作用
虛函數(shù)的作用是實現(xiàn)動態(tài)聯(lián)編,也就是在程序的運行階段動態(tài)地選擇合適的成員函數(shù),在定義了虛函數(shù)后,可以在基類的派生類中對虛函數(shù)重新定義,在派生類中重新定義的函數(shù)應與虛函數(shù)具有相同的形參個數(shù)和形參類型。以實現(xiàn)統(tǒng)一的接口,不同定義過程。如果在派生類中沒有對虛函數(shù)重新定義,則它繼承其基類的虛函數(shù)?! ‘敵绦虬l(fā)現(xiàn)虛函數(shù)名前的關鍵字virtual后,會自動將其作為動態(tài)聯(lián)編處理,即在程序運行時動態(tài)地選擇合適的成員函數(shù)。虛函數(shù)是C++多態(tài)的一種表現(xiàn)。

使用虛函數(shù),我們可以靈活的進行動態(tài)綁定,當然是以一定的開銷為代價。如果父類的函數(shù)(方法)根本沒有必要或者無法實現(xiàn),完全要依賴子類去實現(xiàn)的話,可以把此函數(shù)(方法)設為virtual 函數(shù)名=0 我們把這樣的函數(shù)(方法)稱為純虛函數(shù)如果一個類包含了純虛函數(shù),稱此類為抽象類。

我們只需在把基類的成員函數(shù)設為virtual,其派生類的相應的函數(shù)也會自動變?yōu)樘摵瘮?shù)。

三、動態(tài)綁定過程
表面點來說,虛函數(shù)是根據(jù)調(diào)用它的指針或引用所指向或綁定的對象的類型來調(diào)用綁定或指向的類型所定義的虛函數(shù)版本。

由于類中有虛函數(shù)存在,所以編譯器就會為這個類插入一段你不知道的數(shù)據(jù),并為它創(chuàng)建一個表。那段數(shù)據(jù)叫做vptr指針,指向那個表。那個表叫做vtbl,每個類都有自己的vtbl,vtbl的作用就是保存自定義為virtual的函數(shù)是基類期待派生類重新定義的,基類希望派生類繼承的函數(shù)不能定義為虛函數(shù)己類中虛函數(shù)的地址,我們可以把vtbl形象地看成一個數(shù)組,這個數(shù)組的每個元素存放的就是虛函數(shù)的地址。

調(diào)用虛函數(shù)時,首先是取出vptr的值,這個值就是vtbl的地址,再根據(jù)這個值來到vtbl這里,取出vtbl中相應的slot里的值,這個值就是所在調(diào)用的虛函數(shù)的地址了,最后調(diào)用這個函數(shù)?,F(xiàn)在我們可以看出來了,只要vptr不同,指向的vtbl就不同,而不同的vtbl里裝著對應類的虛函數(shù)地址,所以這樣虛函數(shù)就可以完成它的任務。

四、純虛函數(shù)
在基類中不能對虛函數(shù)給出有意義的實現(xiàn),而把它聲明為純虛函數(shù),它的實現(xiàn)留給該基類的派生類去做。這就是純虛函數(shù)的作用。

純虛函數(shù)可以讓類先具有一個操作名稱,而沒有操作內(nèi)容,讓派生類在繼承時再去具體地給出定義。凡是含有純虛函數(shù)的類叫做抽象類。這種類不能聲明對象,只是作為基類為派生類服務。除非在派生類中完全實現(xiàn)基類中所有的的純虛函數(shù),否則,派生類也變成了抽象類,不能實例化對象。在函數(shù)形參后面寫上=0以指定純虛函數(shù)。

相關文章

  • C語言單鏈隊列的表示與實現(xiàn)實例詳解

    C語言單鏈隊列的表示與實現(xiàn)實例詳解

    這篇文章主要介紹了C語言單鏈隊列的表示與實現(xiàn),對于研究數(shù)據(jù)結(jié)構(gòu)與算法的朋友來說很有參考借鑒價值,需要的朋友可以參考下
    2014-07-07
  • C++快速冪與大數(shù)取模算法示例

    C++快速冪與大數(shù)取模算法示例

    這篇文章主要介紹了C++快速冪算法和大數(shù)取模算法的示例,對C++程序員來說有一定的幫助,有需要的朋友可以參考借鑒,下面來一起看看。
    2016-08-08
  • C語言實現(xiàn)圖形化打磚塊游戲

    C語言實現(xiàn)圖形化打磚塊游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)圖形化打磚塊游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C++中多線程的執(zhí)行順序如你預期嗎

    C++中多線程的執(zhí)行順序如你預期嗎

    這篇文章主要為大家詳細介紹一下C++中多線程的執(zhí)行順序的相關資料,文中的示例代碼講解詳細,對我們學習C++多線程有一定幫助,需要的可以參考一下
    2022-10-10
  • 基于Matlab實現(xiàn)人工神經(jīng)網(wǎng)絡(ANN)回歸的示例詳解

    基于Matlab實現(xiàn)人工神經(jīng)網(wǎng)絡(ANN)回歸的示例詳解

    這篇文章主要為大家詳細介紹了Matlab實現(xiàn)人工神經(jīng)網(wǎng)絡(ANN)回歸的相關資料,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-02-02
  • C/C++讀寫文本文件、二進制文件的方法

    C/C++讀寫文本文件、二進制文件的方法

    今天小編就為大家分享一篇C/C++讀寫文本文件、二進制文件的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • C語言如何讀取bmp圖像

    C語言如何讀取bmp圖像

    這篇文章主要介紹了C語言如何讀取bmp圖像,BMP即bitmap,由文件頭信息塊、圖像描述信息塊、顏色表、圖像數(shù)據(jù)區(qū)四部分組成,下文更多相關資料需要的小伙伴可以參考一下
    2022-04-04
  • 關于C語言strlen與sizeof區(qū)別詳情

    關于C語言strlen與sizeof區(qū)別詳情

    對于 strlen 和 sizeof,相信不少程序員會混淆其功能。雖然從表面上看它們都可以求字符串的長度,但二者卻存在著許多不同之處及本質(zhì)區(qū)別,今天得這篇文章我們就來學習C語言strlen與sizeof區(qū)別的相關資料,需要的朋友可以參考一下
    2021-10-10
  • c語言實現(xiàn)的hashtable分享

    c語言實現(xiàn)的hashtable分享

    哈希表效率高,眾所周知。應用廣泛,php中大部分存儲使用的都是hashtable,包括變量,數(shù)組…如何使用c語言實現(xiàn)hashtable呢,現(xiàn)提供自己的思路,如有不妥之處,敬請賜教
    2014-01-01
  • C語言三個數(shù)排列大小的實現(xiàn)方法

    C語言三個數(shù)排列大小的實現(xiàn)方法

    下面小編就為大家?guī)硪黄狢語言三個數(shù)排列大小的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06

最新評論