const在類和物件中的應用
(1)常量資料成員的應用
(2)函式的引數為常量的應用
(3)常量函式的應用
(4)常量物件的應用
1.常量資料成員的應用
如果某個類中資料成員是const,表示這個資料成員不能直接被修改,這就要求const資料成員變數需要初始化,但是在類中,資料成員不允許在類裡定義時初始化。
那const成員變數什麼時候初始化呢?
分析:類是一種資料型別,所以沒有必要在類產生時就讓資料成員初始化,這也不符合邏輯。
類中資料成員、函式成員最終的使用都是通過例項的物件後呼叫,也就是說有了物件,資料成員和函式成員才 有了生命,所以要對資料成員初始化的時機,就應該是物件產生的時刻。
*由分析可知:const資料成員的初始化應該在建構函式中進行,但是const資料成員的初始化必須在建構函式的初始 化表中進行
2.函式的引數為常量的應用
類中函式成員的引數通常使用引用,表示用源頭的資料,不會自己再複製乙份。如果希望傳給函式成員的資料不被破壞,就需要定義成const,通常函式成員的引數const和引用聯合使用。
示例**:
class demo
void set(const int &x)
private:
int m_a; };
int main()
3.常量函式的應用
***常量函式的最重要的特點是該函式內部不允許修改類的資料成員。
在c++中,常量函式必須定義在類中,以函式成員的形式出現。常量成員函式的好處就是保證類的封裝性,能夠有效防止類的資料成員被非法訪問。
做乙個區分:
const int fun(void); ->這不是常量函式,僅僅表示函式的返回值為常量
int fun(void) const; ->常量成員函式
乙個注意點!!!
int fun(void) const; 和 int fun(void); 是否構成過載?
答案是可以構成過載。為社麼這裡函式名和引數相同也構成過載呢?
因為類的成員函式的第乙個引數被隱藏,類中的成員函式第乙個引數是this指標被隱藏,普通成員函式的指標是普 通指標,常量成員函式的this指標是常量指標,所以實際上有乙個引數不同,所以構成過載。
那麼思考乙個問題?這倆個函式構成過載,那如何區別呼叫到常量函式呢?
常量函式和非常量函式過載時,非常量物件呼叫非常量函式
常量函式和非常量函式過載時,常量物件呼叫常量函式
常量函式的最重要的特點是該函式內部不允許修改類的資料成員。
示例**:
class demo
void set(const int &x)
void set(const int &x)const
private:
int m_a; };
int main()
*物件呼叫常量函式的規則
(1)非常量物件可以呼叫常量函式
(2)非常量物件可以呼叫非常量函式
(3)常量物件可以呼叫常量函式
(4)常量物件不可以呼叫非常量函式
(5)常量函式和非常量函式過載時,非常量物件呼叫非常量函式
(6)常量函式和非常量函式過載時,常量物件呼叫常量函式
4.常量物件的應用
const demo d; ->常量物件
應用在常量函式的呼叫上,因為當常量函式和非常量函式過載時,常量物件能呼叫常量函式 。
常量對像只能呼叫常量函式
類中的常量, const物件和成員函式
常量 起初讀者可能認為合乎邏輯的選擇是把乙個const放在類裡,但這不會產生預期的結果。在乙個類裡,const 恢復它在c中的一部分意思。它在每個類物件裡分配儲存並代表乙個值,這個值一旦被初始化以後就不能改變。在乙個類裡使用const的意思是 在這個物件宣告期內,這個是乙個常量 然而,對這個常量來講...
const在函式宣告中的應用
華清遠見嵌入式學院 上海中心講師。1.在乙個函式宣告中,const 可以修飾函式的返回值,或某個引數 對於成員函式,還可以修飾是整個函式。有如下幾種情況,以下會逐漸的說明用法 a operator const a a void fun0 const a a void fun1 const fun1 ...
const在函式宣告中的應用
1.在乙個函式宣告中,const 可以修飾函式的返回值,或某個引數 對於成員函式,還可以修飾是整個函式。有如下幾種情況,以下會逐漸的說明用法 a operator const a a void fun0 const a a void fun1 const fun1 為類成員函式 const a fu...