close

< C++完整教學目錄 >

 

 

常數物件常數成員函式:一個類別可以定義許多成員函式,但並不是每一個成員函式都對物件成員進行「存」的動作而更改物件成員的值。如果一個成員函式沒有更改物件成員的值,則可以被設為常數成員函式。

將函式設計為常數成員函式後,才可以被常數物件使用。如此一來,方能確保常數物件的物件成員值不會受到任何改變

範例如:

class classA

{

public:

int a;

int b;

int get_a() const {return a;}  //此一函式不會更改物件成員的值,可以將之設定為常數成員函式。

int get_b(){return b;}

void set_a(int a_) const {a=a_;}  //這一行是錯誤示範,此一函式有能力更改物件成員的值,不能設為常數成員函式。

void set_b(int b_) {b=b_;}

classA(int a_=5,int b_=10){a=a_;b=b_;}

};           

const classA A1; // 定義常數物件。註:定義常數物件時,一定要將物件成員的值都進行初始化。

cout<<A1.get_a()<<endl; //使用常數物件的常數成員函式

cout<<A1.get_b()<<endl; //這一行是錯誤示範。雖然此函式不會更改物件成員的值,但因為沒有被設為常數成員函式,所以不能被常數物件拿來使用。

A1.a=9; //這一行是錯誤示範。常數物件成員無法直接被類別外程式碼所設定。(不過一般物件放在public區域的物件成員可以被類別外程式碼所設定)

cout<<A1.a<<endl;  //常數物件放在public區域的物件成員可以直接被類別外程式碼所讀取,顯示5

 

註一:若一常數成員函式要被類別中的其他成員函式所使用時,要確保這「其他成員函式」也是常數成員函式,以確保常數物件成員的值不會遭到函式更動。

註二:就算一個物件不是常數物件,他也可以使用常數成員函式。

 

 

上一篇:類別(class) 建構式的初值設定列

下一篇:類別(class) mutable

arrow
arrow

    埃伯 發表在 痞客邦 留言(0) 人氣()