MST

星途 面试题库

面试题:C++ 常对象的成员函数调用规则

在C++中,定义了一个常对象,请问它可以调用哪些成员函数?请举例说明普通成员函数和常成员函数在常对象调用时的区别,并解释原因。
45.1万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 常对象可调用的成员函数
    • 常对象只能调用常成员函数。这是因为常对象的数据成员是不可修改的,而普通成员函数默认可以修改对象的数据成员,所以为了保证常对象数据的完整性和一致性,常对象只能调用声明为const的常成员函数。
  2. 举例说明普通成员函数和常成员函数在常对象调用时的区别
#include <iostream>
class Example {
private:
    int data;
public:
    Example(int num) : data(num) {}
    // 普通成员函数
    void modifyData(int newData) {
        data = newData;
    }
    // 常成员函数
    int getData() const {
        return data;
    }
};
int main() {
    const Example obj(10);
    // 以下调用会报错,因为常对象不能调用普通成员函数
    // obj.modifyData(20); 
    // 正确调用,常对象可以调用常成员函数
    std::cout << "Data from const object: " << obj.getData() << std::endl;
    return 0;
}
  1. 原因解释
    • 普通成员函数没有const修饰,意味着它可能会修改对象的数据成员。而常对象的所有数据成员在对象的生命周期内都应保持不变。如果允许常对象调用普通成员函数,就可能破坏常对象数据的常量性。
    • 常成员函数在声明和定义时都带有const关键字,它承诺不会修改对象的数据成员(除了mutable修饰的成员),所以常对象可以安全地调用常成员函数。