защищенное наследование - почему не разрешена определенная команда - PullRequest
0 голосов
/ 22 февраля 2019

Предположим, у меня есть следующий код:

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

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

    void main()
    {

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

Теперь, прочитав Разница между частным, публичным и защищенным наследованием , я заключаю, что в случае защищенного наследования каждый публичныйчлен базы (в этом отношении - класс A) будет доступен в производном классе (класс B).

Однако я не понимаю, почему команда b.foo(); не разрешена в этом случае, потому что онапо-видимому, разрешено в соответствии с правилами защищенного наследования.

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

В этом случае только class B «знает» или «знает» о внутренних отношениях между class A и самим собой из-за отношения protected.А именно, main() не знает указанных отношений.

0 голосов
/ 22 февраля 2019

Вы пытаетесь получить доступ к B :: foo () из области видимости main ().Поскольку foo не является публичной в этом контексте, это не разрешено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...