protected (C++)
Sintassi
protected:
[member-list]
protected base-class
Osservazioni:
La protected
parola chiave specifica l'accesso ai membri della classe nell'elenco dei membri fino all'identificatore di accesso successivo (public
o private
) o alla fine della definizione della classe. I membri della classe dichiarati come protected
possono essere usati solo dai seguenti:
Funzioni membro della classe che ha in origine dichiarato questi membri.
Elementi friend della classe che ha in origine dichiarato questi membri.
Classi derivate con accesso pubblico o protetto dalla classe che ha in origine dichiarato questi membri.
Classi dirette derivate in modo privato che dispongono anche di accesso privato ai membri protetti.
Quando si precede il nome di una classe base, la protected
parola chiave specifica che i membri pubblici e protetti della classe base sono membri protetti delle relative classi derivate.
I membri protetti non sono privati come private
membri, accessibili solo ai membri della classe in cui sono dichiarati, ma non sono pubblici come public
membri, accessibili in qualsiasi funzione.
Membri protetti dichiarati anche come static
accessibili a qualsiasi funzione friend o membro di una classe derivata. Membri protetti che non sono dichiarati come static
sono accessibili a amici e funzioni membro in una classe derivata solo tramite un puntatore a, un riferimento o un oggetto della classe derivata.
Per informazioni correlate, vedere friend, public, private e la tabella di accesso ai membri in Controllo dell'accesso ai membri della classe.
Specifico di /clr
Nei tipi CLR, le parole chiave dell'identificatore di accesso C++ (public
, private
e protected
) possono influire sulla visibilità dei tipi e dei metodi relativi agli assembly. Per altre informazioni, vedere Controllo di accesso membro.
Nota
I file compilati con /LN non sono interessati da questo comportamento. In questo caso, tutte le classi gestite (sia pubbliche che private) saranno visibili.
Specifico di END /clr
Esempio
// keyword_protected.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
class X {
public:
void setProtMemb( int i ) { m_protMemb = i; }
void Display() { cout << m_protMemb << endl; }
protected:
int m_protMemb;
void Protfunc() { cout << "\nAccess allowed\n"; }
} x;
class Y : public X {
public:
void useProtfunc() { Protfunc(); }
} y;
int main() {
// x.m_protMemb; error, m_protMemb is protected
x.setProtMemb( 0 ); // OK, uses public access function
x.Display();
y.setProtMemb( 5 ); // OK, uses public access function
y.Display();
// x.Protfunc(); error, Protfunc() is protected
y.useProtfunc(); // OK, uses public access function
// in the derived class
}