常量物件與常量成員函式來防止修改物件,實現最低許可權原則。
可以用關鍵字const來指定物件是不可修改的,任何修改該物件的企圖,都會導致編譯錯誤。
例如:const time noon(12,0,0);
宣告乙個
time
類的常量物件
noon
,並將它初始化為中午
12點。
c++不允許在常量物件上呼叫成員函式,除非成員函式本身也被宣告為常量。甚至對不會修改物件的成員函式,也是如此,此外,編譯器不允許宣告常量的成員函式修改物件。
對一般情況下,通常修改物件的建構函式和析構函式而言,它們不允許被宣告成const
。關於常量物件和常量成員函式的使用方法如下:
(1)非常量物件呼叫非常量成員函式 (正確)
(2)非常量物件呼叫常量成員函式 (正確)
(3)常量物件呼叫常量成員函式 (正確)
(4)常量物件呼叫非常量成員函式 (錯誤)
儘管建構函式必須是非常量成員函式,但它仍然可用於初始化常量物件。
常量物件的「常量性」是在建構函式完成了物件的初始化之後生效的,持續到呼叫了物件的析構函式。
成員函式沒有修改物件的事實,並不足以表明它就是常量函式,常量函式必須顯式地用const
宣告。常量成員函式的初始化必須用初始化列表。
例如:increment::increment(int c,int i) : count(c),increment(i);{}
初始化列表出現在建構函式的參數列 和 表示建構函式函式體開始的左大括號之間。成員初始化列表用冒號和參數列隔開。
常量資料成員(常量物件和常量變數)以及被宣告為引用的資料成員,都必須用成員初始化列表初始化,在建構函式中對這些型別的資料賦值是不允許的。
常量成員函式與常量物件
一 非常量物件可以訪問類的普通成員函式和常量成員函式 include using namespace std class stack void push int nelem intpop int getcount const 常量成員函式 int main 二 常量物件只能訪問常量成員函式,不能訪問...
常量成員函式
參考 常量成員函式宣告 如 int get const 規則 1.常量成員函式不修改物件。2.常量成員函式在定義和宣告中都應加const限定 3.非常量成員函式不能被常量成員函式呼叫,但建構函式和析構函式除外。4.常量 const物件 物件只能呼叫常量成員函式。const物件的資料成員在物件壽命週期...
常量成員函式
class a void fun1 const error assignment of member a a in read only objectclass a void fun1 const error passing const a as this argument of void a fun...