国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

虛函數與純虛函數(C++與Java虛函數的區別)的深入分析

2020-01-26 16:01:13
字體:
來源:轉載
供稿:網友

c++
虛函數
1.定義:在某基類中聲明為 virtual 并在一個或多個派生類中被重新定 義的成員函數 [1]
2.語法:virtual 函數返回類型 函數名(參數表) { 函數體 }
3.用途:實現多態性,通過指向派生類的基類指針,訪問派生類中同名覆蓋成員函數,也就是允許子類
override父類同名方法。
虛函數的作用是實現動態聯編,也就是在程序的運行階段動態地選擇合適的成員函數,在定義了虛函數后,可以在基類的派生類中對虛函數重新定義,在派生類中重新定義的函數應與虛函數具有相同的形參個數和形參類型(也就是完全相同的方法,不能只是函數名相同。)。以實現統一的接口,不同的定義過程。如果在派生類中沒有對虛函數重新定義,則它繼承其基類的虛函數。

當程序發現虛函數名前的關鍵字virtual后,會自動將其作為動態聯編處理,即在程序運行時動態地選擇合適的成員函數。虛函數是C++多態的一種表現。動態聯編規定,只能通過指向基類的指針或基類對象的引用來調用虛函數,其格式:
1.指向基類的指針變量名->虛函數名(實參表)
2.基類對象的引用名. 虛函數名(實參表)
使用虛函數,我們可以靈活的進行動態綁定,當然是以一定的開銷為代價。如果父類的函數(方法)根本沒有必要或者無法實現,完全要依賴子類去實現的話,可以把此函數(方法)設為virtual 函數名=0 ,例如:virtual void fun() = 0,我們把這樣的函數(方法)稱為純虛函數。如果一個類包含了純虛函數,稱此類為抽象類。
總結:如果一個子類想要重寫父類的方法,那么父類的這個成員方法必須是virtual的,也就是這個方法必須是虛函數。

java
在java中,所有方法默認就是虛擬的,只要方法不是聲明為final類型的,那么肯定就是虛函數,不用為方法顯示聲明為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"。所以我們發現,在java中,子類可以重寫(override)父類的方法,而父類沒有聲明virtual。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 渝北区| 乡城县| 息烽县| 阳春市| 亳州市| 竹山县| 新巴尔虎左旗| 旺苍县| 泰兴市| 岚皋县| 库伦旗| 奉新县| 海南省| 崇信县| 延寿县| 宣化县| 本溪市| 扎囊县| 华池县| 奉化市| 军事| 汶上县| 大城县| 烟台市| 晋州市| 昭平县| 左云县| 镇赉县| 岗巴县| 崇州市| 敦煌市| 防城港市| 湘阴县| 汝阳县| 寿阳县| 龙井市| 仁化县| 邹城市| 龙口市| 武隆县| 千阳县|