面试题答案
一键面试- const修饰成员函数的作用:
- 保证对象状态的安全性:当一个成员函数被
const
修饰时,意味着该函数不会修改调用它的对象的成员变量(除非这些成员变量被声明为mutable
)。这有助于确保在调用该函数时,对象的状态不会被意外改变,提高程序的稳定性和可维护性。 - 区分函数重载:
const
对象只能调用const
成员函数,而非const
对象既可以调用const
成员函数,也可以调用非const
成员函数。因此,通过是否const
修饰成员函数,可以实现函数重载,为不同状态的对象提供不同的行为。
- 保证对象状态的安全性:当一个成员函数被
- 实际场景举例:
- 获取对象属性值:
class Rectangle {
private:
int width;
int height;
public:
Rectangle(int w, int h) : width(w), height(h) {}
// const成员函数,用于获取矩形面积,不会改变对象状态
int getArea() const {
return width * height;
}
};
在上述代码中,getArea
函数用于获取矩形的面积,它不需要修改矩形对象的width
和height
成员变量,因此将其声明为const
成员函数是合理的。这样,const
Rectangle对象也可以调用getArea
函数。
- 只读操作:
class String {
private:
char* str;
int length;
public:
String(const char* s) {
length = strlen(s);
str = new char[length + 1];
strcpy(str, s);
}
~String() {
delete[] str;
}
// const成员函数,用于比较两个字符串是否相等,不会改变对象状态
bool equals(const String& other) const {
if (length != other.length) {
return false;
}
return strcmp(str, other.str) == 0;
}
};
在这个String
类中,equals
函数用于比较两个字符串对象是否相等,它不会修改调用它的字符串对象,所以将其声明为const
成员函数。这样,const
String对象可以调用equals
函数进行比较操作。