MST

星途 面试题库

面试题:C++常指针在类数据成员保护中的应用

假设有一个类`Person`,包含姓名`name`和年龄`age`两个数据成员。请使用常指针来保护这些数据成员,防止在类的某些成员函数中被意外修改。写出类的定义和相关成员函数,并解释为什么这样可以实现数据保护。
12.7万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
#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;
    }
};

解释

  1. 数据成员定义:将nameage定义为指向const对象的指针。这样,通过指针间接访问的对象不能被修改。如果尝试在类的成员函数中修改*name*age,编译器会报错,从而实现对数据成员的保护。
  2. 构造函数:在构造函数中初始化nameage指针,使其指向传入的const对象。这样,类外部传入的数据在类内部也不会被意外修改。
  3. 成员函数getNamegetAge成员函数被声明为const,这意味着它们不会修改对象的状态,进一步保证了数据的安全性。通过返回const引用或值,调用者也不能修改这些数据。

通过以上方式,使用指向const对象的指针来存储数据成员,并在成员函数中遵循const原则,可以有效地防止在类的某些成员函数中对数据成员的意外修改。