更新時(shí)間:2017-12-29 來(lái)源:黑馬程序員 瀏覽量:
引用:
java和c++都有引用的概念,但兩者是完全不同的東西,c++的引用是變量的一個(gè)別名,引用一旦綁定就不能重新引用其他變量,c++引用也不能為null。java引用更像c++的指針,對(duì)引用賦值是重新綁定引用的對(duì)象(在c++里面是改變對(duì)象的值),引用可以為null(導(dǎo)致了煩人的NPE問(wèn)題,萬(wàn)惡之源)
類(lèi)型系統(tǒng):
java區(qū)分值類(lèi)型與引用類(lèi)型,用戶(hù)自定義類(lèi)型都是引用類(lèi)型,值類(lèi)型和引用類(lèi)型在很多地方不能混用(如泛型參數(shù)),c++沒(méi)有值類(lèi)型和引用類(lèi)型的概念,類(lèi)似的概念是普通類(lèi)和它的指針類(lèi)型。
java有根基類(lèi)Object,c++沒(méi)有根基類(lèi)。
訪(fǎng)問(wèn)控制:
都有public,protected,private三級(jí)訪(fǎng)問(wèn)控制
此外,java還有包訪(fǎng)問(wèn)控制,c++有友元
繼承:
c++分public繼承,protected繼承(意義不明)和private繼承(基本和組合沒(méi)啥區(qū)別),java只有public繼承。
c++只能覆蓋基類(lèi)中顯式定義的虛函數(shù),java中方法默認(rèn)是虛的,除非顯式標(biāo)明final
c++支持多重繼承,java只支持單繼承,但支持實(shí)現(xiàn)多個(gè)接口(c++沒(méi)有語(yǔ)法層面上的接口)
構(gòu)造與析構(gòu):
對(duì)象構(gòu)造大致相同,但是c++在構(gòu)造函數(shù)中調(diào)用虛函數(shù)無(wú)法多態(tài)(因?yàn)閷?duì)象的子類(lèi)部分還沒(méi)構(gòu)造)
c++可以定義析構(gòu)函數(shù),java沒(méi)有析構(gòu)函數(shù)(java提供一個(gè)終結(jié)方法,但它和析構(gòu)函數(shù)不是等價(jià)的)
對(duì)象生命周期控制:
c++主要靠手動(dòng)申請(qǐng),釋放內(nèi)存或者借助析構(gòu)函數(shù)(RAII技術(shù)),java依靠gc
異常處理:
c++沒(méi)有也不需要finally塊,釋放資源依靠析構(gòu)函數(shù)就行了。
泛型:
c++模板采用代碼生成技術(shù),運(yùn)行時(shí)能夠保留類(lèi)型信息,java采用類(lèi)型擦除,類(lèi)型信息在運(yùn)行時(shí)就沒(méi)了(所以其實(shí)只是進(jìn)行安全的自動(dòng)類(lèi)型轉(zhuǎn)換而已……)。c++模板參數(shù)可以是基本類(lèi)型,用戶(hù)自定義類(lèi)型和整型常量,java只能是引用類(lèi)型。c++還可以對(duì)模板進(jìn)行特化,java沒(méi)有這個(gè)功能。
其他:
c++有運(yùn)算符重載,java沒(méi)有(除了String類(lèi)重載了+)
本文版權(quán)歸黑馬程序員C/C++學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!
作者:黑馬程序員C/C++培訓(xùn)學(xué)院
首發(fā):http://c.itheima.com/
C語(yǔ)言二維數(shù)組的定義和引用
2017-11-30C/C++技術(shù)知識(shí)點(diǎn):深入淺出-服務(wù)器高并發(fā)庫(kù)libevent(二)
2017-11-30C/C++:深入淺出-服務(wù)器高并發(fā)庫(kù)libevent(一)
2017-11-30C/C++技術(shù)知識(shí)點(diǎn): Qt和MFC比較
2017-11-30C/C++技術(shù):最容易犯錯(cuò)的知識(shí)點(diǎn)(一)
2017-11-30傳智播客C/C++培訓(xùn)專(zhuān)家:漫談軟件編碼風(fēng)格
2017-11-21