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