虛函數(shù)與純虛函數(shù)(C++與Java虛函數(shù)的區(qū)別)的深入分析
c++
虛函數(shù)
1.定義:在某基類中聲明為 virtual 并在一個(gè)或多個(gè)派生類中被重新定 義的成員函數(shù) [1]
2.語法:virtual 函數(shù)返回類型 函數(shù)名(參數(shù)表) { 函數(shù)體 }
3.用途:實(shí)現(xiàn)多態(tài)性,通過指向派生類的基類指針,訪問派生類中同名覆蓋成員函數(shù),也就是允許子類override父類同名方法。
虛函數(shù)的作用是實(shí)現(xiàn)動(dòng)態(tài)聯(lián)編,也就是在程序的運(yùn)行階段動(dòng)態(tài)地選擇合適的成員函數(shù),在定義了虛函數(shù)后,可以在基類的派生類中對虛函數(shù)重新定義,在派生類中重新定義的函數(shù)應(yīng)與虛函數(shù)具有相同的形參個(gè)數(shù)和形參類型(也就是完全相同的方法,不能只是函數(shù)名相同。)。以實(shí)現(xiàn)統(tǒng)一的接口,不同的定義過程。如果在派生類中沒有對虛函數(shù)重新定義,則它繼承其基類的虛函數(shù)。
當(dāng)程序發(fā)現(xiàn)虛函數(shù)名前的關(guān)鍵字virtual后,會(huì)自動(dòng)將其作為動(dòng)態(tài)聯(lián)編處理,即在程序運(yùn)行時(shí)動(dòng)態(tài)地選擇合適的成員函數(shù)。虛函數(shù)是C++多態(tài)的一種表現(xiàn)。動(dòng)態(tài)聯(lián)編規(guī)定,只能通過指向基類的指針或基類對象的引用來調(diào)用虛函數(shù),其格式:
1.指向基類的指針變量名->虛函數(shù)名(實(shí)參表)
2.基類對象的引用名. 虛函數(shù)名(實(shí)參表)
使用虛函數(shù),我們可以靈活的進(jìn)行動(dòng)態(tài)綁定,當(dāng)然是以一定的開銷為代價(jià)。如果父類的函數(shù)(方法)根本沒有必要或者無法實(shí)現(xiàn),完全要依賴子類去實(shí)現(xiàn)的話,可以把此函數(shù)(方法)設(shè)為virtual 函數(shù)名=0 ,例如:virtual void fun() = 0,我們把這樣的函數(shù)(方法)稱為純虛函數(shù)。如果一個(gè)類包含了純虛函數(shù),稱此類為抽象類。
總結(jié):如果一個(gè)子類想要重寫父類的方法,那么父類的這個(gè)成員方法必須是virtual的,也就是這個(gè)方法必須是虛函數(shù)。
java
在java中,所有方法默認(rèn)就是虛擬的,只要方法不是聲明為final類型的,那么肯定就是虛函數(shù),不用為方法顯示聲明為virtual。在<core java2 :volum I>中提到:"In Java, you do not need to declare a method as virtual. Dynamic binding is the default behavior. If you do not want a method to be virtual, you tag it as final"。所以我們發(fā)現(xiàn),在java中,子類可以重寫(override)父類的方法,而父類沒有聲明virtual。
上一篇:C語言中判斷int,long型等變量是否賦值的方法詳解
欄 目:C語言
本文標(biāo)題:虛函數(shù)與純虛函數(shù)(C++與Java虛函數(shù)的區(qū)別)的深入分析
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/4332.html
您可能感興趣的文章
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用函數(shù)刪除字符
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)式函數(shù)庫
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言中對數(shù)函數(shù)的表達(dá)式 c語言中對數(shù)怎么表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段函數(shù)
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排序法函數(shù)
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段函數(shù)
- 04-02C語言中怎么打出三角函數(shù) c語言中怎么打出三角函數(shù)的值
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求階乘


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達(dá)式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機(jī)閱讀
- 01-10delphi制作wav文件的方法
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 04-02jquery與jsp,用jquery
- 08-05織夢dedecms什么時(shí)候用欄目交叉功能?
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 01-10C#中split用法實(shí)例總結(jié)