доступ к защищенному члену базового класса в другом подклассе
Почему это компилируется:
class FooBase
{
protected:
void fooBase(void);
};
class Foo : public FooBase
{
public:
void foo(Foo& fooBar)
{
fooBar.fooBase();
}
};
а это не так?
class FooBase
{
protected:
void fooBase(void);
};
class Foo : public FooBase
{
public:
void foo(FooBase& fooBar)
{
fooBar.fooBase();
}
};
С одной стороны, C ++ предоставляет доступ к закрытым / защищенным членам для всех экземпляров этого класса, но с другой стороны, он не предоставляет доступ к защищенным членам базового класса для всех экземпляров подкласса. Это выглядит довольно противоречиво для меня.
Я протестировал компиляцию с VC ++ и ideone.com, и оба компилировали первый, но не второй фрагмент кода.