Ayer encontré un error y, aunque es fácil de recorrer, quería asegurarme de entender C++ correctamente.Acceso a miembros protegidos en una clase derivada
que tienen una clase base con un miembro protegido:
class Base
{
protected:
int b;
public:
void DoSomething(const Base& that)
{
b+=that.b;
}
};
Esto compila y funciona muy bien. Ahora extiende la base, pero aún desea utilizar b:
class Derived : public Base
{
protected:
int d;
public:
void DoSomething(const Base& that)
{
b+=that.b;
d=0;
}
};
Nótese que en este caso DoSomething
se sigue tomando una referencia a un Base
, no Derived
. Esperaría que todavía puedo tener acceso a that.b
dentro de Derived
, pero me sale un error de cannot access protected member
(MSVC 8.0 - aún no he probado gcc).
Obviamente, agregar un getter público en b
resolvió el problema, pero me preguntaba por qué no podía tener acceso directamente al b
. Pensé que cuando utilizas la herencia pública, las variables protegidas siguen siendo visibles para la clase derivada.
Consulte http://www.gotw.ca/gotw/076.htm (Nota: no use eso en el código de producción). – Brian