MST

星途 面试题库

面试题:C++ 类成员访问属性动态调整之高级难度

设计一个C++类体系,基类 `Base` 有保护成员 `protectedData`。派生类 `Derived` 中有一个成员函数 `adjustAccess`,在运行时根据用户输入(例如从控制台读取一个布尔值)来决定是否将 `protectedData` 的访问属性临时提升为类似公有访问,以便在 `Derived` 的其他成员函数中进行特定操作(比如计算 `protectedData` 的平方并返回结果)。请阐述设计思路并给出关键代码实现。
14.4万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

设计思路

  1. 在基类 Base 中定义保护成员 protectedData
  2. 在派生类 Derived 中,adjustAccess 函数根据用户输入来设置一个标志位,用于标记是否需要临时提升访问权限。
  3. 定义一个成员函数,如 computeSquare,在该函数中根据标志位来决定是否可以访问 protectedData 并进行平方计算。

关键代码实现

#include <iostream>

class Base {
protected:
    int protectedData;
public:
    Base(int data) : protectedData(data) {}
};

class Derived : public Base {
private:
    bool canAccess;
public:
    Derived(int data) : Base(data), canAccess(false) {}

    void adjustAccess() {
        bool input;
        std::cout << "请输入一个布尔值 (true/false) 来决定是否提升访问权限: ";
        std::cin >> input;
        canAccess = input;
    }

    int computeSquare() {
        if (canAccess) {
            return protectedData * protectedData;
        } else {
            std::cerr << "访问被拒绝" << std::endl;
            return -1;
        }
    }
};

你可以这样使用这个类:

int main() {
    Derived d(5);
    d.adjustAccess();
    int result = d.computeSquare();
    if (result != -1) {
        std::cout << "平方结果是: " << result << std::endl;
    }
    return 0;
}