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