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