const
int pi=
46;
保證資料成員不被改變的物件,可以宣告為常物件
class
time
private
:int hour;
int minute;
int sec;};
intmain()
類名 const 物件名(實參表列)const 類名 物件名(實參表列)
常成員可以訪問常物件的資料成員;
class
time
;void time::
set_time
(int h,
int m,
int s)
const
//定義
intmain()
class
time
1.只能通過建構函式的引數初始化表進行對常資料成員的初始化time (int h):hour(h){} //類內定義
time::time(int h):hour(h){} //類外定義
2.不能通過建構函式中的賦值方法對資料成員的初始化time:
:time
(int h)
//非法
3.不能通過其他函式中的賦值方法對資料成員的初始化time::
settime
(int h)
//非法
設計策略:
修改常物件中的某個資料成員,該資料成員的宣告是mutable
mutable
int a;
類名 *const 變數名
time t1(10
,12,15
),t2;
time *
const pt=
&t1;
pt=*t2;
//錯誤,pt只能指向乙個位址
ps:指向的值可以改變的,只要指向的物件不是const
const 類名 *變數名 / 型別名 const
*變數名;
const
char c=
"hello"
;//指向常變數的指標指向常變數
char
*pt=c;
//錯誤,只有指向常變數的指標才能指向變數
char c1=
'a';
const
char
*p1;
p=&c1;
//合法。指向長變數的指標可以指向非const變數
*p='b'
;//不合法,不能用指向常變數的指標改變變數的值
c1='b1'
;//合法,c1又不是常變數
const 類名 *變數名 / 型別名 const *變數名;
const time t1(10
,12,10
);
int a;
int&b=a;宣告b是a的引用,a=b
a=20
;
函式的形參是物件的應用void fun(time &t)
;
共用資料的保護
一 常物件 類名 const 物件名 實參表列 const 類名 物件名 實參表列 如果乙個物件被宣告為常物件,則不能呼叫該物件的非const型成員函式,目的是為了防止這些函式會修改常物件中資料成員的值。常成員函式的宣告 void get const 如果一定要修改常物件中的某乙個資料成員的值,則應...
C const保護陣列
使用普通函式時,由於實際使用的是函式所用資料的副本,所以在函式中修改副本的值並不能改變其原本資料的值。但是在以陣列為引數的函式中,由於引數傳遞的是位址的副本,因此可以根據位址的副本去改原陣列的值。而在很多時候我們僅僅需要獲取陣列的值,不願意讓函式有改變原陣列的權利,這時我們可以用const保護陣列。...
c const成員函式
一些成員函式改變物件,一些成員函式不改變物件。例如 int point gety 這個函式被呼叫時,不改變point物件,而下面的函式改變point物件 void point setpt int x,int y 為了使成員函式的意義更加清楚,我們可在不改變物件的成員函式的函式原型中加上const說明...