dostęp do chronionego członka klasy bazowej w innej podklasie
Dlaczego to się kompiluje:
class FooBase
{
protected:
void fooBase(void);
};
class Foo : public FooBase
{
public:
void foo(Foo& fooBar)
{
fooBar.fooBase();
}
};
ale tak nie jest?
class FooBase
{
protected:
void fooBase(void);
};
class Foo : public FooBase
{
public:
void foo(FooBase& fooBar)
{
fooBar.fooBase();
}
};
Z jednej strony C ++ zapewnia dostęp do prywatnych / chronionych elementów dla wszystkich instancji tej klasy, ale z drugiej strony nie przyznaje dostępu chronionym członkom klasy bazowej dla wszystkich instancji podklasy. Wydaje mi się to niespójne.
Przetestowałem kompilację z VC ++ iz ideone.com i kompiluję pierwszy, ale nie drugi fragment kodu.