1. 程式人生 > >關於const用法,常物件

關於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)不起作用。