Предположим, у меня есть следующий код:
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();
не разрешена в этом случае, потому что онапо-видимому, разрешено в соответствии с правилами защищенного наследования.