【问题标题】:protected inheritance - why a certain command is not allowed受保护的继承 - 为什么不允许某个命令
【发布时间】:2019-07-16 21:55:36
【问题描述】:

假设我有以下代码:

class A
    {
    public:
        void foo() const {}
    };

    class B : protected A
    {
    public:
    void print() const
    {
        foo();
    }
    };

    void main()
    {

    B b;
    b.print();
    b.foo();
    }

现在,通过阅读Difference between private, public, and protected inheritance,我得出结论,在受保护继承的情况下,基类的每个公共成员(就此而言 - 类 A)都可以在派生类(类 B)中访问。

但是,我不明白为什么在这种情况下不允许使用命令b.foo();,因为根据受保护继承的规则,它显然是允许的。

【问题讨论】:

  • 假装B 声明protected: void foo() const; 可能会有所帮助。适用相同的访问限制。
  • 访问规则规定B可以访问foo,但在b.foo();中访问的不是B而是你
  • in 是关键字。 main 的范围不在那里,是吗?

标签: c++ inheritance protected


【解决方案1】:

您正试图从 main() 的范围内访问 B::foo()。由于 foo 在此上下文中不是公开的,因此是不允许的。

【讨论】:

    【解决方案2】:

    在这种情况下,由于protected 的关系,只有class B“知道”或“知道”class A 与其自身之间的内在关系。即main()不知道上述关系。

    【讨论】:

      猜你喜欢
      • 2013-10-01
      • 2015-07-14
      • 1970-01-01
      • 2012-01-17
      • 2012-09-27
      • 2023-04-05
      • 2016-09-13
      • 1970-01-01
      • 2020-09-17
      相关资源
      最近更新 更多