關於const用法,常物件
常物件中資料成員為常變數且需要有初值,例:Time const t1(12,34,46);這樣資料就不能被修改,
定義形式:類名 const 物件[實參表列];或者const 類名 物件名[實參表列];
如上例中有 t1.gettime();是不對的。
如何訪問常物件中的資料?
需將成員函式申明為const即可,如void gettime() const;即可,可訪問,但不允許修改常物件中的值。const成員函式如果需要修改某個常物件中某個值,需要在該資料成員申明為mutable,使得資料成員為可變的資料成員。
1.常資料成員
即用const修飾的變數,值不能改變,只能通過建構函式的引數初始化表對常資料成員進行初始化。例 有const int hour;
Time::Time(int h)
{hour=h;}//錯誤
Time::Time(int h):hour(h){}//正確
2.常成員函式
如果函式是常成員函式,只能引用本類中資料成員,不能修改,例 void get_time() const;
總之,const成員函式可以引用其他資料成員,但不可以改變他們的值。
3.指向物件的常指標
將指向物件的指標申明為常指標,且初始化,則指標值不變,即指向不會變,例:
Time t1(10,12,15),t2;
Time * const ptr1&t1;則ptr1不能再指向其他物件。定義形式:
類名 *const 指標變數名=物件地址;注:在定義時初始化。
4.指向常物件的指標變數
(1)指向常變數的指標
const 型別名 *指標變數名;如果一個變數已經被宣告為常變數,則只能用指向常變數的指標去指向。函式呼叫過程中應當注意當形參是指向非const的,則實參也是非const。
(2)指向常物件的指標
Time t1(10,10,20);
const Time *p=&t1;
t1.hour=18;//正確
(*p).hour=18//錯誤
5.物件的常引用
變數名和引用名都指向同一段記憶體單元,如形參為變數的引用,實參為變數名,則呼叫函式時,把實參變數的地址傳給形參,引用名也指向實參。
例
void fun (Time &t)
{t.hour=18;}
呼叫的時候用fun(t1);
若不想改變值宣告改為 void fun(const Time&t);則fun(t1)不起作用。