c++ - 使用声明修改派生类中的访问说明符

标签 c++

作为一种面向对象的语言,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/

相关文章:

c++ - 在函数上使用 typedef

c++ - 将内存中的 sqlite 数据库转换为 blob/char 数组

c++ - map<string, vector<string>> vector 值的重新赋值

c++ - 为什么转换构造函数优于转换运算符?

通过游戏客户端的 C++ Steam ID 身份验证

c++ - 将模板方法作为参数传递

c++ - 解析复杂的字符串

c++ - 构造函数返回什么?

c++ - vector 是否知道在由一对迭代器初始化时首先保留?

c++ - 使用调试信息编译 OpenCL 内核?