目录
在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. 总结
常量成员函数在设计不可变对象和确保对象状态不被意外修改时非常有用。它们提供了一种方式来保证对象的某些操作是只读的,从而提高代码的可靠性和可维护性。在实际编程中,尽可能多地使用常量成员函数以确保对象的状态安全。
标签:const,常量,int,成员,C++,修改,函数 From: https://www.cnblogs.com/keye/p/18332078