從C到C++:
首先來了解一下概念:如果學習過java可以和java來對比學習
引用:
類型名 & 引用名=某變量名
int n=4; int & r=n; //r引用了n,r的類型是int &
引用只能引用變量,不能引用常量或者表達式
引用的理解可以參考java中的引用,實際上他們都是使用不同的名字去操作同一個地址的值
eg:可以利用引用來交換值
引用作爲函數的返回值:可以通過函數的調用來實現對變量的修改
引用前面加上const,就是常引用(不能通過常引用去修改它所引用的值)
const關鍵字:
用來定義常量,它可以代替define,因爲,const有類型,所以可以確保安全
定義常量指針:不可通過常量指針來修改其指向的內容
常量指針不能賦值給非常量指針(通過強制轉換可以實現)
非常量指針能賦值給常量指針
動態內存分配:
方法一:
P=new T;
T是任意的類型名,P是類型爲T* 的指針,動態分配出一個大小爲sizeof(T)字節的內存空間,並且將該空間的起始地址複製給P
方法二:
P=new T[N];
P還是類型爲T *的指針
通過delete釋放變量空間
delete 指針:該指針必須指向new出來的空間
通過delete釋放分配的數組空間
delete [] 指針:該指針必須指向new出來的數組
new出來的空間必須通過delete來刪除,不會自動調用析構函數(後面會有講解)
內聯函數:
編譯器處理內聯函數的語句時,是將整個函數的代碼插入到調用語句處,而不產生調用函數的語句
在函數的定義前面加“inline”
函數重載:
名字相同,參數個數或者參數類型不同
定義函數時可以讓最右邊的連續若干個參數有缺省值
類和對象:
類定義出來的變量,也成爲類的實例,就是我們所說的對象
對象的大小隻包含它的成員變量的大小
成員:
類的成員函數可以和類的定義分開來寫,在類的裏面要寫這個函數的聲明
類成員的訪問範圍:
private:私有成員,只能在成員函數內訪問
public:公有成員,可以在任何地方訪問
protected:保護成員
如果前面沒有標註,則默認爲私有的
成員函數可以重載及參數缺省
構造函數:
和java構造函數相似,名字相同,沒有返回值
對象生成時構造函數自動被調用
複製構造函數:
只有一個參數,就是同類對象的引用,如果沒有定義複製構造函數,那麼編譯器就會默認生成複製構造函數,它的功能就是來完成複製功能
eg:
使得c2==c1,起始它會返回該類的引用給c2
還有一種寫法 Complex c2=c1;和上面的寫法是相似的
如果一個函數的參數時類A的對象,那麼該函數調用時,類A的賦值構造函數將會被調用,起始就是形參作爲引用指向實際參數所指向的地方
如果函數的返回值是類A的對象,則函數返回時,A的賦值構造函數被調用
對象賦值並不導致賦值構造函數被調用
類型轉換構造函數
定義轉換構造函數的目的是實現類型的自動轉換
實際上就是 c1=9 時,9被自動的轉換爲一個對象,調用的就是Complex(int i)這個構造參數,然後創建了一個Complex的臨時對象,再將這個對象賦值給c1
析構函數:
名字和類名相同,在前面加'~',沒有參數,沒有返回值,一個類最多隻有一個析構函數,析構函數在對象消亡的時候被自動調用
對象數組生命週期結束時,對象數組的每個元素的析構函數都會被調用
eg:
注意:new出來的東西只有delete了纔會消亡,否則不會消亡,就不會調用析構函數