MST

星途 面试题库

面试题:C++中类成员访问属性安全性保障之中等难度

在C++中,已知一个类有public、private和protected三种访问属性,请说明如何通过合理设置类成员的访问属性,防止外部类对关键数据成员的直接修改,同时保证类内部的成员函数能够正确访问和操作这些数据成员。并举例说明。
26.5万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 设置访问属性的方法
    • 将关键数据成员设置为privateprotected
      • private成员只能被类自身的成员函数访问,外部类和派生类都无法直接访问。
      • protected成员能被类自身的成员函数以及派生类的成员函数访问,但外部类不能直接访问。
    • 通过在类中定义public成员函数来提供对关键数据成员的间接访问和操作。这些public成员函数可以进行必要的检查和控制,以确保数据的正确性和一致性。
  2. 举例说明
#include <iostream>

class Example {
private:
    int criticalData; // 关键数据成员,设为private
public:
    // 构造函数
    Example(int data) : criticalData(data) {}

    // 获取关键数据成员的函数
    int getCriticalData() const {
        return criticalData;
    }

    // 修改关键数据成员的函数,可进行必要的检查
    void setCriticalData(int newData) {
        if (newData >= 0) { // 假设数据必须是非负的
            criticalData = newData;
        } else {
            std::cerr << "Invalid data. Data must be non - negative." << std::endl;
        }
    }
};

int main() {
    Example ex(10);
    // 无法直接访问criticalData,如下操作会报错
    // ex.criticalData = 20; 
    // 通过public成员函数访问和修改
    std::cout << "Current data: " << ex.getCriticalData() << std::endl;
    ex.setCriticalData(20);
    std::cout << "New data: " << ex.getCriticalData() << std::endl;
    ex.setCriticalData(-1);
    std::cout << "After invalid set, data: " << ex.getCriticalData() << std::endl;
    return 0;
}

在上述例子中,criticalData被设置为private,外部类不能直接修改它。通过public成员函数getCriticalDatasetCriticalData,外部类可以间接获取和修改criticalData,并且在setCriticalData函数中可以进行数据有效性检查,保证数据的正确性。