面试题答案
一键面试#include <iostream>
#include <string>
class Person {
private:
const std::string* name;
const int* age;
public:
Person(const std::string& n, int a) : name(&n), age(&a) {}
// 获取姓名
const std::string& getName() const {
return *name;
}
// 获取年龄
int getAge() const {
return *age;
}
};
解释
- 数据成员定义:将
name
和age
定义为指向const
对象的指针。这样,通过指针间接访问的对象不能被修改。如果尝试在类的成员函数中修改*name
或*age
,编译器会报错,从而实现对数据成员的保护。 - 构造函数:在构造函数中初始化
name
和age
指针,使其指向传入的const
对象。这样,类外部传入的数据在类内部也不会被意外修改。 - 成员函数:
getName
和getAge
成员函数被声明为const
,这意味着它们不会修改对象的状态,进一步保证了数据的安全性。通过返回const
引用或值,调用者也不能修改这些数据。
通过以上方式,使用指向const
对象的指针来存储数据成员,并在成员函数中遵循const
原则,可以有效地防止在类的某些成员函数中对数据成员的意外修改。