- 常对象可调用的成员函数:
- 常对象只能调用常成员函数。这是因为常对象的数据成员是不可修改的,而普通成员函数默认可以修改对象的数据成员,所以为了保证常对象数据的完整性和一致性,常对象只能调用声明为
const
的常成员函数。
- 举例说明普通成员函数和常成员函数在常对象调用时的区别:
#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;
}
- 原因解释:
- 普通成员函数没有
const
修饰,意味着它可能会修改对象的数据成员。而常对象的所有数据成员在对象的生命周期内都应保持不变。如果允许常对象调用普通成员函数,就可能破坏常对象数据的常量性。
- 常成员函数在声明和定义时都带有
const
关键字,它承诺不会修改对象的数据成员(除了mutable
修饰的成员),所以常对象可以安全地调用常成员函数。