Ho avuto un errore ieri e, mentre è facile spostarsi, volevo essere sicuro di capire bene il C++.Accesso a membri protetti in una classe derivata
Ho una classe base con un membro protetto:
class Base
{
protected:
int b;
public:
void DoSomething(const Base& that)
{
b+=that.b;
}
};
Questo compila e funziona bene. Ora mi rivolgo Base, ma ancora voglia di usare B:
class Derived : public Base
{
protected:
int d;
public:
void DoSomething(const Base& that)
{
b+=that.b;
d=0;
}
};
nota che in questo caso DoSomething
è ancora in corso un riferimento a un Base
, non Derived
. Mi aspetto che possa ancora accedere a that.b
all'interno di Derived
, ma ottengo un errore cannot access protected member
(MSVC 8.0 - non ho ancora provato gcc).
Ovviamente, l'aggiunta di un getter pubblico su b
ha risolto il problema, ma mi chiedevo perché non potessi accedere direttamente a b
. Tuttavia, se si utilizza l'ereditarietà pubblica, le variabili protette sono ancora visibili alla classe derivata.
Controlla http://www.gotw.ca/gotw/076.htm (Nota: non usare quella roba nel codice di produzione). – Brian