C#、C++、JAVA中虛函數和抽…

1、C++中函數被定義爲虛函數的方法是在函數名前加virtual,虛函數可以有自己的具體內容,也可以不含有函數實現內容,稱爲純虛函數。這裏未指明爲純虛函數的函數均默認爲非純虛函數。純虛函數的表示形式爲virtual int getNum()=0;後面加"==0"表示函數無實現內容。含有虛函數的類可以實例化,可當作普通類來使用,但含有純虛函數的類只能被繼承後才能使用,且子類中必須實現父類的純虛函數,這種情況下父類稱爲抽象類。

2、java中沒有虛函數的概念,普通函數就相當於C++中的虛函數,不過可以在函數前加final使函數不能被重寫。java中的含有抽象函數,相當於C++中的純虛函數,java的抽象函數只能在抽象類中定義。java的抽象類不能被實例化,抽象類的子類必須實現全部抽象函數。可見java和C++中,虛函數的相關概念本質上是一致的。

3、C#整合了java和C++,對虛函數有了更明細的劃分。定義了虛函數和抽象函數。虛函數定義時,在函數前加virtual,函數必須有實現,在子類中可以重寫也可以不重寫虛函數,重寫虛函數時應在重寫的函數前加override關鍵字。抽象函數不能含有函數實現,類似於接口,在繼承的子類中必須重寫該函數。另外,抽象函數只能定義在抽象類中,在普通類中定義抽象函數會報錯。

可簡單對比理解如下:

C++:  虛函數    純虛函數
java: 普通函數  抽象函數
C#:   虛函數    抽象函數
三種語言相對應的概念是基本一致的。java普通函數就可以被子類重寫,而C++、C#中只有虛函數、純虛函數或抽象函數可以被子類重寫;java的純虛函數及C++、C#的抽象函數對應的類都是抽象類,且抽象類均不能實例化,只能被子類繼承。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章