目錄
- 1. 宣告與定義
- 2. 常量成員函式的特點
- 3. 常量成員函式的使用
- 4. 關鍵字
mutable
- 5. 總結
在C++中,常量成員函式(const member function)是指在函式宣告的尾部加上 const
關鍵字的成員函式。這種函式不能修改類的成員變數,也不能呼叫會修改類成員變數的其他成員函式。常量成員函式保證了類的物件在呼叫這些函式時不會被修改。
1. 宣告與定義
常量成員函式的宣告和定義形式如下:
class MyClass {
public:
int getValue() const; // 常量成員函式的宣告
void setValue(int v);
private:
int value;
};
int MyClass::getValue() const {
return value; // 不能修改成員變數
}
void MyClass::setValue(int v) {
value = v; // 可以修改成員變數
}
在上面的示例中,getValue
是一個常量成員函式,而 setValue
不是。
2. 常量成員函式的特點
-
不可修改成員變數:常量成員函式不能修改類的成員變數。例如,
getValue
函式不能對value
進行修改。 -
只能呼叫其他常量成員函式:常量成員函式只能呼叫其他常量成員函式,因為呼叫非常量成員函式可能會修改物件的狀態。
-
常量物件只能呼叫常量成員函式:如果一個物件被宣告為
const
,則只能呼叫常量成員函式。例如:const MyClass obj; obj.getValue(); // 正確,getValue 是常量成員函式 obj.setValue(10); // 錯誤,setValue 不是常量成員函式
3. 常量成員函式的使用
常量成員函式通常用於只讀操作,即獲取物件的狀態而不修改它們。例如,訪問器(getter)函式通常被宣告為常量成員函式:
class Point {
public:
Point(int x, int y) : x_(x), y_(y) {}
int getX() const {
return x_;
}
int getY() const {
return y_;
}
private:
int x_;
int y_;
};
在這個例子中,getX
和 getY
函式都是常量成員函式,因為它們只返回物件的狀態而不修改它。
4. 關鍵字 mutable
如果確實需要在常量成員函式中修改某些成員變數,可以使用 mutable
關鍵字將這些變數宣告為可變的。例如:
class Example {
public:
void setValue(int v) const {
mutableValue = v; // 可以修改 mutable 變數
}
int getValue() const {
return mutableValue;
}
private:
mutable int mutableValue;
};
在這個例子中,儘管 setValue
是一個常量成員函式,但它可以修改 mutableValue
變數,因為 mutableValue
被宣告為 mutable
。
5. 總結
常量成員函式在設計不可變物件和確保物件狀態不被意外修改時非常有用。它們提供了一種方式來保證物件的某些操作是隻讀的,從而提高程式碼的可靠性和可維護性。在實際程式設計中,儘可能多地使用常量成員函式以確保物件的狀態安全。