使用声明修改派生类中的访问说明符
using declarations for modifying access specifiers in derived class
c++作为面向对象语言的主要设计原则之一是让每个类强制谁可以访问它的内部,谁不能。基类控制它的访问级别,即使它是相对于嵌入在基类派生的类的对象中的基类对象。
然而,我读到使用声明可以被允许在派生类中更改基类成员的访问级别。
class A{
protected:
int n;
};
class B:protected A{
public:
using A::n;
};
int main(){
B obj;
obj.n=0;
}
在上面的示例中,我在派生类中将受保护成员的访问级别更改为public。这是允许的吗?为什么不能强制访问级别应该更严格或等于基类中的访问级别(这也可以通过派生列表中的访问资格来控制),而不能比基类中的访问级别更宽松呢?这是允许的吗,因为这允许一些有趣的设计模式?我只是想理解为什么像这样的东西打破了一个类强制封装的原则是允许的? 原因之一是,即使您不是基类的所有者,也可以通过这种方式更改可见性修饰符。例如,如果基类包含在外部库/框架中,您可以更改可见性修饰符。
相关文章:
- 函数模板签名中忽略的成员类型def 的访问说明符
- C++ 访问说明符理解
- 访问说明符(私有/公共/受保护)如何在内部工作(限制成员访问)?
- 访问说明符和性能
- 访问说明符外部的 C++ 类成员
- 在scons中将访问说明符从private更改为public
- 使用Astmatcher获得至少两个相同访问说明符的课程
- 内联访问说明符出现语法问题
- 为什么C 标准专门为具有不同访问说明符的类数据成员的内存布局提供了余地
- 访问has-a关系的访问说明符
- 访问说明符不会更改可访问性级别.这是什么意思
- 关于C++中的访问说明符
- 关于访问说明符的困惑
- 类定义中的宏相关访问说明符是否会导致未定义的行为
- 为什么虚函数无视访问说明符?C++
- 模拟 C 中的访问说明符
- 访问说明符对好友函数是否重要
- 细粒度访问说明符 c++
- 对基于访问说明符的特定重载函数使用声明
- 在C++中,do访问说明符不控制静态成员的可见性