作为一种面向对象的语言,C++ 的主要设计原则之一是让每个类强制规定谁可以访问它的内部结构,谁不能。基类控制它的访问级别,即使它是关于嵌入在从 Base 派生的类的对象中的基类对象。
不过,我读到过使用声明可以更改派生类中基类成员的访问级别。
class A{
protected:
int n;
};
class B:protected A{
public:
using A::n;
};
int main(){
B obj;
obj.n=0;
}
在上面的示例中,我在派生类中将 protected 成员的访问级别更改为 public。这是故意允许的吗?为什么不能强制访问级别应该更严格或等于它在基类中的方式(这也可以通过派生列表中的访问资格来控制)但不能比访问级别更宽松在基础类?这是允许的,因为这允许一些有趣的设计模式吗?我只是想理解为什么允许这样违反类强制封装原则的事情?
最佳答案
一个原因是即使您不是基类的所有者,您也可以通过这种方式更改可见性修饰符。 例如,如果基类包含在外部库/框架中,您可以更改可见性修饰符。
关于c++ - 使用声明修改派生类中的访问说明符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30434258/