MST

星途 面试题库

面试题:C++中常对象的成员函数访问规则

在C++中,定义了一个常对象,请问它可以调用哪些类型的成员函数?并说明原因。请举例代码说明。
31.9万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 可调用的成员函数类型
    • 常对象只能调用常成员函数。
  2. 原因
    • 常对象的状态是不可变的,非常成员函数可能会修改对象的成员变量,这与常对象的不可变特性相冲突。而常成员函数承诺不会修改对象的成员变量(除了mutable修饰的成员变量),所以常对象可以安全地调用常成员函数。
  3. 示例代码
#include <iostream>

class MyClass {
private:
    int data;
public:
    MyClass(int value) : data(value) {}
    // 常成员函数
    void print() const {
        std::cout << "Data: " << data << std::endl;
    }
    // 非常成员函数
    void increment() {
        data++;
    }
};

int main() {
    const MyClass obj(10);
    // 以下调用正确,因为print是常成员函数
    obj.print(); 
    // 以下调用错误,因为increment是非常成员函数,常对象不能调用
    // obj.increment(); 
    return 0;
}