acessando um membro protegido de uma classe base em outra subclasse
Por que isso compila:
class FooBase
{
protected:
void fooBase(void);
};
class Foo : public FooBase
{
public:
void foo(Foo& fooBar)
{
fooBar.fooBase();
}
};
mas isso não acontece?
class FooBase
{
protected:
void fooBase(void);
};
class Foo : public FooBase
{
public:
void foo(FooBase& fooBar)
{
fooBar.fooBase();
}
};
Por um lado, o C ++ concede acesso a membros privados / protegidos para todas as instâncias dessa classe, mas por outro lado, não concede acesso a membros protegidos de uma classe base para todas as instâncias de uma subclasse. Isso parece bastante inconsistente para mim.
Eu testei compilar com VC ++ e com ideone.com e ambos compilar o primeiro, mas não o segundo trecho de código.