MST

星途 面试题库

面试题:C++中const修饰成员函数的作用及使用场景

请阐述C++里const修饰成员函数时,它具体起到什么作用?并举例说明在哪些实际场景下会使用const修饰成员函数。
13.5万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. const修饰成员函数的作用
    • 保证对象状态的安全性:当一个成员函数被const修饰时,意味着该函数不会修改调用它的对象的成员变量(除非这些成员变量被声明为mutable)。这有助于确保在调用该函数时,对象的状态不会被意外改变,提高程序的稳定性和可维护性。
    • 区分函数重载const对象只能调用const成员函数,而非const对象既可以调用const成员函数,也可以调用非const成员函数。因此,通过是否const修饰成员函数,可以实现函数重载,为不同状态的对象提供不同的行为。
  2. 实际场景举例
    • 获取对象属性值
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函数用于获取矩形的面积,它不需要修改矩形对象的widthheight成员变量,因此将其声明为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函数进行比较操作。