Почему это компилируется:
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();
}
};
С одной стороны, С++ предоставляет доступ к частным/защищенным членам для всех экземпляров этого класса, но, с другой стороны, он не предоставляет доступ к защищенным членам базового класса для всех экземпляров подкласса. Это выглядит довольно непоследовательно для меня.
Я тестировал компиляцию с VС++ и с ideone.com и компилировал первый, но не второй фрагмент кода.