Почему это компилируется:
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, и оба компилируют первый, но не второй фрагмент кода.