基礎知識:
-
引用reference:
引用:複合類型,相當於變量的另外一個名字,綽號,節省了拷貝帶來的內存損耗,在實際程序中,主要用作函數的形式參數; -
類class:
理解成圖紙,不佔用內存,包括了成員變量和成員函數。對象是類的實例化,可以看成零件。 -
指針pointer:
指針也是一種變量!指針的內容是地址!
〇、什麼是const(必須知道的事情)?
-
簡單理解:
const的目的就是定義一個“不會被修改的常量” -
可以修飾:
變量、引用、指針,可以用於函數參數、成員函數修飾。成員變量。 -
作用:
使用const可以減少代碼出錯的概率!避免magic number 以及增強程序的可讀性。
這個常量既可以防止程序其他地方不小心修改這個值,也能讓程序員比較方便的調整這個值的大小。 -
與宏定於#define的區別:
const有類型,可以進行類型檢查,而宏定義沒有。 -
常量指針和指針常量
常量指針(指向常量的指針)
指針常量(地址是常量,指針指向的地址不變) -
Const值一旦創建後就不能修改,所以const對象必須初始化;
一、const的初始化:
const值一旦創建後就不能修改,所以const對象必須初始化。
const int i=0;//正確
const int i;//錯誤
const對象可以用非const對象初始化,也可以賦給非const對象,同時也能參與運算,只要初始化後不改變它的值就沒問題。
int i;
const int j=i;//正確
int m=j;//正確
二、const的作用域:
默認狀態下,const對象僅在文件內有效,不同文件的const對象不是同一個對象
文件之間可以共享的方法:可以使用extern來解決問題。
三、const與引用
const 引用是指向const的引用
- 對常量的引用必須要用
const
:
const int c=42;
int &r1 = c; //錯誤,因爲非常量引用可以改變所引用對象,所以這樣不合理
const int &r2 = c; //正確,引用與對應的對象都是常量
四、 const與指針:
重要!重要!重要!
對着代碼讀:
- 把星號*讀作指針,
- 把const讀作常量
- 非常容易!!!
比如:
const int* p就是——常量指針
int* const p就是——指針常量
- 與常量引用相似,指向常量的指針必須要用const指針(指向常量的指針)
const int c=42;
int *r1=&c; //錯誤
const int*r2=&c;//正確
*r2=42;//錯誤,不能給指針所指對象賦值
- 常量指針(指向const的指針)和指針常量(const指針)
區分
- 常量指針(指向常量的指針),只能夠讀取內存中數據,卻不能夠修改內存中數據的屬性的指針,稱爲指向常量的指針,簡稱常量指針。
和 - 指針常量(地址是常量,指針指向的位置(地址)不變,指針本身是一個常量,但是指針指向的內容可以改變)
(前兩個字作爲形容詞修飾後兩個字。同時大家也要注意const指針這一說法,不要理解成常量指針)
Int num=0;
Int*const cur=#//一直指向num
Const double pi=3.1415;
Const double * const pip=π//指向常量的常量指針。
現在舉例子說明一下常量指針域指針常量到底如何區分。
- int const* cur; 常量指針,指向常量的指針
2.Const int * cur; 常量指針,指向常量的指針
-
int*const cur; 指針常量
-
const(int *) cur; //錯誤,不可以這麼寫
辨識小技巧:
對着代碼讀,把星號讀作指針,把const讀作常量,非常容易。
Step1: const在星號*的前面,那麼就是常量指針
——“const前常量指針”
Step2: const在星號*的後面,那麼就是指針常量
——“const後指針常量”
五、 const與類:
-
const成員變量:
類中聲明變量爲const類型。但是不可以初始化,必須要在構造函數初始化列表中初始化。
這樣的變量其實只是在一個對象中是不變的,要想在整個類中都不變就得用enum(枚舉) -
const成員函數:
這樣的成員函數不可以修改數據成員,如果修改成員變量或者調用了其他非const成員函數就會報錯。