acceder a un miembro protegido de una clase base en otra subclase
¿Por qué compila esto?
class FooBase
{
protected:
void fooBase(void);
};
class Foo : public FooBase
{
public:
void foo(Foo& fooBar)
{
fooBar.fooBase();
}
};
¿Pero esto no?
class FooBase
{
protected:
void fooBase(void);
};
class Foo : public FooBase
{
public:
void foo(FooBase& fooBar)
{
fooBar.fooBase();
}
};
Por un lado, C ++ otorga acceso a miembros privados / protegidos para todas las instancias de esa clase, pero por otro lado no otorga acceso a miembros protegidos de una clase base para todas las instancias de una subclase. Esto me parece bastante inconsistente.
He probado la compilación con VC ++ y con ideone.com y ambos compilan el primer fragmento de código, pero no el segundo.