C 中使用const定義成員變數與函式及物件

2021-10-07 16:59:20 字數 1942 閱讀 6851

1、如果 const 用來修飾成員變數,無法對其進行賦值,需要用到初始化成員列表進行初始化。

class person

};

2、const 的成員函式,是在函式宣告的最後新增 const,並預設該函式內部的變數都被 const 修飾。

class person

};

3、非 const 和 const 成員函式是過載關係,並且程式會呼叫下面的成員函式。

class person

void

display()

};

4、如果對 const 修飾的函式採取類外定義,則會出現「重複定義」的錯誤。

class person};

void person:

:display()

將程式修改為

class person

;void person:

:display()

此時類外宣告的函式是給void display();這個函式使用的,所以如果對 const 修飾的函式進行類外宣告,也是需要加上 const 的,如下:

class person

;void person:

:display()

const

void person:

:display()

然而程式執行,始終執行的是非 const 的成員函式,那麼 const 修飾的成員函式如何呼叫呢?這就要求在建立物件時也要加上 const:

const person p1;

p1.display()

;// 此時就會呼叫 const 修飾的成員函式

所以一句話總結為:const 物件呼叫 const 成員函式

當類中並沒有 const 成員函式時,如果使用 const 修飾建立的物件,那麼就會出現匹配錯誤,即 const 物件只能呼叫 const 成員函式;

而當類中只有 const 成員函式時,非 const 和 const 物件都可以呼叫 const 成員函式。

先建立物件 p1,然後使用新的引用去繫結

person p1;

person &p2 = p1;

但如果是以下情況就會報錯,因為非 const 引用不能繫結 const 物件

const person p1;

person &p2 = p1;

而 const 引用可以繫結非 const 物件

person p1;

const person &p2 = p1;

拷貝建構函式的情形:

class person};

const person p1;

person p2 = p1;

此時程式是報錯的,需要進行以下處理

class person

person

(const person &p1)};

const person p1;

person p2 = p1;

同樣的,如果像下面這樣使用指標,也會出現型別不匹配的情況,即非const指標不能繫結const物件,const指標可以繫結非const物件。

person *pp =

&p1;

還有一種從 c 語言中沿襲下來的一種形式,這種形式一旦在初始化繫結位址後,不可更換繫結的位址。

person *

const pp1 =

&p1;

C 之const類成員變數,const成員函式

const修飾類的成員函式 const修飾變數一般有兩種方式 const t a,或者 t const a,這兩者都是一樣的,主要看const位於 的左邊還是右邊,這裡不再贅述,主要來看一下當const修飾類的成員函式時,成員函式有什麼特點。類的成員函式後面加 const,表明這個函式不會對這個類物...

const 成員變數

class mytestclass public const int m ciint const string m csstr static int m siint static string m ssstr const static int m csiint const static string...

const成員變數

const成員變數 舉個例子 include using namespace std classa private const intsize int main 說明 但是 此時的const變數屬於具體的乙個物件,如何在整個類中都恆定不變呢?答案是利用列舉,舉例 include using name...