面试题答案
一键面试- 可调用的成员函数类型:
- 常对象只能调用常成员函数。
- 原因:
- 常对象的状态是不可变的,非常成员函数可能会修改对象的成员变量,这与常对象的不可变特性相冲突。而常成员函数承诺不会修改对象的成员变量(除了
mutable
修饰的成员变量),所以常对象可以安全地调用常成员函数。
- 常对象的状态是不可变的,非常成员函数可能会修改对象的成员变量,这与常对象的不可变特性相冲突。而常成员函数承诺不会修改对象的成员变量(除了
- 示例代码:
#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;
}