MST

星途 面试题库

面试题:C++私有成员变量可访问函数在继承体系中的特性

假设有基类`Base`包含私有成员变量`basePrivateVar`以及对其进行访问的成员函数`getBasePrivateVar`和`setBasePrivateVar`。有派生类`Derived`继承自`Base`,请分析在`Derived`类中能否直接调用`Base`类的这些可访问函数来操作`basePrivateVar`?如果不能,应该如何正确访问?同时解释背后的原理。
43.8万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 能否直接调用
    • Derived类中不能直接访问Base类的私有成员变量basePrivateVar,但是可以调用Base类中对basePrivateVar进行访问的成员函数getBasePrivateVarsetBasePrivateVar
  2. 原理
    • 私有成员变量在类的外部(包括派生类)是不可见的,这是为了数据封装和信息隐藏。通过将成员变量设为私有,类的设计者可以控制对这些变量的访问方式,避免外部代码随意修改或访问,保证数据的完整性和安全性。
    • 而成员函数getBasePrivateVarsetBasePrivateVarBase类的公共接口,派生类继承自Base类,自然可以调用这些公共接口函数,从而间接操作basePrivateVar
  3. 示例代码(以C++为例)
#include <iostream>

class Base {
private:
    int basePrivateVar;
public:
    Base(int value = 0) : basePrivateVar(value) {}
    int getBasePrivateVar() const {
        return basePrivateVar;
    }
    void setBasePrivateVar(int value) {
        basePrivateVar = value;
    }
};

class Derived : public Base {
public:
    Derived(int value = 0) : Base(value) {}
    void manipulateBasePrivateVar() {
        // 不能直接访问basePrivateVar,如下面这样写是错误的
        // basePrivateVar = 10; 
        // 但是可以调用Base类的公共接口函数
        setBasePrivateVar(10);
        std::cout << "Base private var value: " << getBasePrivateVar() << std::endl;
    }
};

int main() {
    Derived d(5);
    d.manipulateBasePrivateVar();
    return 0;
}

在上述代码中,Derived类通过调用Base类的getBasePrivateVarsetBasePrivateVar函数来操作basePrivateVar,而不是直接访问basePrivateVar