java 多態(tài) 怎樣理解c 中的虛基類和虛函數(shù).純虛函數(shù)?
怎樣理解c 中的虛基類和虛函數(shù).純虛函數(shù)?虛擬函數(shù)和純虛擬函數(shù)有以下區(qū)別。(1) 如果在類中聲明了虛函數(shù),則即使該函數(shù)為空,也會實現(xiàn)該函數(shù)。它的目的是使函數(shù)能夠包含在其子類中。這樣,編譯器就可以使用
怎樣理解c 中的虛基類和虛函數(shù).純虛函數(shù)?
虛擬函數(shù)和純虛擬函數(shù)有以下區(qū)別。(1) 如果在類中聲明了虛函數(shù),則即使該函數(shù)為空,也會實現(xiàn)該函數(shù)。它的目的是使函數(shù)能夠包含在其子類中。這樣,編譯器就可以使用后期綁定來實現(xiàn)多態(tài)性。純虛函數(shù)只是一個接口,一個函數(shù)的聲明,需要在子類中實現(xiàn)。(2) 虛擬函數(shù)不能在子類中重載,但是純虛擬函數(shù)必須在子類中實現(xiàn),就像Java接口一樣。一般來說,在許多函數(shù)中添加虛擬元素是一個好習(xí)慣。雖然犧牲了一些性能,但是面向?qū)ο蟮亩鄳B(tài)性增加了,因為很難預(yù)測父類中的函數(shù)不在子類中,并且它的實現(xiàn)不會被修改。(3) 虛函數(shù)類用于“實現(xiàn)繼承”,不僅繼承接口,而且繼承父類的實現(xiàn)。當(dāng)然,你也可以完成你自己的實現(xiàn)。純虛函數(shù)注重接口的統(tǒng)一性,通過子類實現(xiàn)。(4) 具有純虛函數(shù)的類稱為虛基類。這種基類不能直接生成對象。只有繼承并重寫虛擬函數(shù)后才能使用。這樣的類也稱為抽象類。
Java和C 的區(qū)別是什么?
C是基于C語言開發(fā)的,一開始C語言不支持面向?qū)ο?,后來又引入了面向?qū)ο蟮母拍?,也就是C,而Java是天生的面向?qū)ο螅腥苏fC不是一個完整的面向?qū)ο笳Z言,但都是狹義的。如果要比較這兩種語言,Java更面向?qū)ο螅磺卸际菍ο?,接口、繼承等功能都很完善。例如,當(dāng)涉及到多態(tài)性時,C需要使用虛擬函數(shù),而Java直接實現(xiàn)它們。但從語言的角度來看,Java是一種跨平臺的解釋性語言。解釋器將把文本解釋成語法樹,而不是編譯。Java在Java虛擬機(jī)上運行,不直接在內(nèi)存上運行。虛擬機(jī)具有垃圾收集機(jī)制,是一種內(nèi)存安全的編程語言。因此,它不如C靈活,效率也不高。C是一種編譯語言,編譯器將代碼編譯成機(jī)器代碼。因此,有人說C/C是最接近機(jī)器語言的高級語言,也有人稱C為中間語言。但是由于操作系統(tǒng)的底層接口和實現(xiàn)機(jī)制不同,系統(tǒng)調(diào)用的代碼也會不同,所以C/C也不一樣,不能跨平臺運行,一般用于追求高效、低層次的開發(fā),如MCU。C內(nèi)存不安全,因此程序員需要警惕內(nèi)存泄漏、數(shù)據(jù)損壞等問題。從開發(fā)角度看,C/C語法簡潔靈活,開發(fā)效率高于Java,但學(xué)習(xí)困難,Java代碼繁瑣,開發(fā)效率低。然而,由于它有許多框架、許多可重用類庫和J2EE支持,因此在web和Internet開發(fā)中得到了廣泛的應(yīng)用。