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