1.創(chuàng)建對象:
在java中創(chuàng)建對象只能用new才行,返回的是引用類型,所以對象名其實(shí)是引用。而C++中的對象創(chuàng)建不一樣,C++可以用指針存對象,相當(dāng)于引用。也可以直接用類標(biāo)識符來創(chuàng)建對象。如Person是類,Person a,b;在C++中就創(chuàng)建了兩個對象,在java中是Person對象的引用。
2.C++中了this指針:
C++中的this指針和java中的一樣。在C++中,this指針指向當(dāng)前對象,this指針隱含在每個成員函數(shù)之中,其類型是class className *.
內(nèi)部機(jī)制:
在C++中訪問數(shù)據(jù)成員都是隱含的使用this指針操作的。需要注意的是。
1.this指針是const類型,不可改變。
2.this指針針對對象,所以靜態(tài)成員是沒有this指針的。
3.構(gòu)造函數(shù)和析構(gòu)函數(shù)
構(gòu)造函數(shù)就不說了,只說下默認(rèn)構(gòu)造函數(shù)就死className() {},默認(rèn)會生成。但是如果你自己定義了構(gòu)造函數(shù),而且不是定義成默認(rèn)構(gòu)造函數(shù),就要在定義一下默認(rèn)構(gòu)造函數(shù),不然創(chuàng)建對象時候必須指定參數(shù),不能用無參數(shù)的。
析構(gòu)函數(shù),就是用來在對象要銷毀時候,回收一些對象自己向系統(tǒng)申請的內(nèi)存。析構(gòu)函數(shù)調(diào)用完后,系統(tǒng)才清除對象本身占據(jù)的內(nèi)存。
Tips:
1.析構(gòu)函數(shù)不能重載,只有一種形式~className() {},這是和構(gòu)造函數(shù)的區(qū)別
2.三種情況下調(diào)用析構(gòu)函數(shù),對象離開局部作用域后,撤銷對象觸發(fā),程序終止,觸發(fā);delete運(yùn)算符回收new創(chuàng)建的對象觸發(fā);臨時匿名函數(shù)使用完畢;
4.拷貝構(gòu)造函數(shù)和單參構(gòu)造函數(shù)
(1)拷貝構(gòu)造函數(shù),其實(shí)就是構(gòu)造函數(shù)中的單參數(shù)形式的構(gòu)造函數(shù),只是其參數(shù)比較特別,是對自身同類對象的引用。拷貝構(gòu)造函數(shù)在一下幾個的方會用到。
Date a;Date b(a);//調(diào)用的就是拷貝構(gòu)造函數(shù)
Date b = a;//調(diào)用的也是拷貝構(gòu)造函數(shù)
function(Date d){….};function(a);//調(diào)用的也是拷貝構(gòu)造函數(shù)(先創(chuàng)建Date類的匿名對象,然后調(diào)用拷貝構(gòu)造函數(shù))
Date c = function(a);//這邊f(xié)unction返回Date對象,也是調(diào)用拷貝構(gòu)造函數(shù)(沒有創(chuàng)建匿名對象)
(2)單參構(gòu)造函數(shù)
單參數(shù)構(gòu)造函數(shù)。其實(shí)拷貝構(gòu)造函數(shù)也是單參構(gòu)造函數(shù)。但是我將他們區(qū)別開來,主要是單參構(gòu)造函數(shù),主要是用在,隱式的類型轉(zhuǎn)換上。
如你定義了一個Integer類,直接Integer a = 1;是會出錯的。因?yàn)?不能自動或者隱含的轉(zhuǎn)換成Integer對象,所以這時候你就要定義
單參數(shù)構(gòu)造函數(shù),用來讓自動轉(zhuǎn)換,在java中稱為包裝。由于是構(gòu)造函數(shù),參數(shù)中的類型就是那個要轉(zhuǎn)換的類型。其它和基本構(gòu)造函數(shù)一樣。
5.靜態(tài)成員
靜態(tài)成員又分為靜態(tài)數(shù)據(jù)成員和靜態(tài)函數(shù)成員。C++中的靜態(tài)函數(shù)成員和java也沒區(qū)別。主要是靜態(tài)數(shù)據(jù)成員。所以我們總結(jié)下靜態(tài)數(shù)據(jù)成員
(1)靜態(tài)數(shù)據(jù)成員和類共存亡而不是和對象。
(2)靜態(tài)數(shù)據(jù)成員在類加載時候分配空間并進(jìn)行初始化,而不是在對象加載時候。所以靜態(tài)數(shù)據(jù)成員默認(rèn)初始化為0。
重點(diǎn)是:類中的靜態(tài)數(shù)據(jù)成員知識一份聲明,必須在類外重新定義并初始化靜態(tài)數(shù)據(jù)成員。
(3)類外通過類作用域運(yùn)算符::訪問靜態(tài)數(shù)據(jù)成員。
6.const用法
(1)const成員函數(shù),這時候const加載函數(shù)名后面 {}之前。表示函數(shù)不會改變當(dāng)前對象的狀態(tài),而且只能調(diào)用const成員函數(shù)。(養(yǎng)成習(xí)慣,能加盡量加)
Tips:這里const也是函數(shù)簽名的一部分。
(2)const對象,表示常量對象。
(3)const形參,表示函數(shù)中不會改變該形參。注意:常量對象,只能調(diào)用const成員函數(shù),因?yàn)檫@才能保證狀態(tài)不被改變,同時這樣保證了他就是常量對象。
Tips:這里const也是函數(shù)簽名的一部分。
(4)const返回值,說明返回值是不可以改變的。
以上這些都是總結(jié),不是寫給沒基礎(chǔ)的人看的。只是為了方便整理和記憶。