受保护的继承-为什么不允许使用某个命令

时间:2019-02-22 18:42:36

标签: c++ inheritance protected

假设我有以下代码:

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,我得出的结论是,在保护继承的情况下,派生类(B类)可以访问基类的每个公共成员(就此而言,类A)。

>

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

2 个答案:

答案 0 :(得分:0)

您正在尝试从main()的范围访问B :: foo()。由于foo在这种情况下不是公共的,因此不允许。

答案 1 :(得分:-1)

在这种情况下,只有class B“知道”或“知道” class A与自身之间的固有关系,因为该关系为protected。也就是说,main()不知道上述关系。