const在類和物件中的應用

2021-08-15 05:05:20 字數 1775 閱讀 6616

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...