Não é possível acessar o membro protegido de outra instância do escopo do tipo derivado
Noesta resposta para a pergunta "Por que meu objeto não pode acessar membros protegidos de outro objeto definido na classe base comum?", pode-se ler:
Você pode acessar apenas membros protegidos de sua própria instância de classe base.
Ou eu não entendi direito ou oseguindo MCVE (ao vivo no coliru) prova errado:
struct Base { void f(); protected: int prot; };
struct Derived : Base { void g(); private: int priv; };
void Base::f()
{
Base b;
b.prot = prot;
(void) b;
}
void Derived::g()
{
{
Derived d;
(void) d.priv;
}
{
Derived& d = *this;
(void) d.priv;
}
{
Derived d;
(void) d.prot; // <-- access to other instance's protected member
}
{
Derived& d = *this;
(void) d.prot;
}
// ---
{
Base b;
(void) b.prot; // error: 'int Base::prot' is protected within this context
}
{
Base& b = *this;
(void) b.prot; // error: 'int Base::prot' is protected within this context
}
}
À luz dos dois erros, fico me perguntando: por que posso acessar outroDerived
membro protegido da instância do escopo deDerived
mas não pode acessar a outroBase
membro protegido da instância do mesmo escopo, independentemente do fato de queDerived
devora deBase
? Tl; dr: o que fazprotected
mais "privado" queprivate
nesse caso?
Notas:
não feche esta questão como uma duplicata da questão vinculada;sugestões de títulos melhores são bem-vindas.