Identificatori di accesso C++
Identificatori di accesso
Ormai hai abbastanza familiarità con la public
parola chiave che appare in tutti i nostri esempi di classe:
Esempio
class MyClass { // The class
public: // Access specifier
// class members goes here
};
La public
parola chiave è uno specificatore di accesso.
Gli specificatori di accesso definiscono come è possibile accedere ai membri (attributi e metodi) di una classe. Nell'esempio sopra, i membri sono public
- il che significa che è possibile accedervi e modificarli dall'esterno del codice.
Tuttavia, cosa succede se vogliamo che i membri siano privati e nascosti dal mondo esterno?
In C++, ci sono tre identificatori di accesso:
public
- i membri sono accessibili dall'esterno della classeprivate
- non è possibile accedere (o visualizzare) i membri dall'esterno della classeprotected
- non è possibile accedere ai membri dall'esterno della classe, tuttavia è possibile accedervi nelle classi ereditate. Imparerai di più sull'ereditarietà più avanti.
Nell'esempio seguente, mostriamo le differenze tra membri public
e private
:
Esempio
class
MyClass {
public: // Public access
specifier
int x; // Public attribute
private: // Private access specifier
int y; // Private attribute
};
int main() {
MyClass
myObj;
myObj.x = 25; // Allowed (public)
myObj.y = 50; //
Not allowed (private)
return 0;
}
Se provi ad accedere a un membro privato, si verifica un errore:
error: y is private
Nota: è possibile accedere ai membri privati di una classe utilizzando un metodo pubblico all'interno della stessa classe. Vedere il prossimo capitolo ( Encapsulation ) su come farlo.
Suggerimento: è considerata una buona pratica dichiarare gli attributi della tua classe come privati (il più spesso possibile). Ciò ridurrà la possibilità da parte tua (o di altri) di incasinare il codice. Questo è anche l'ingrediente principale del concetto di Encapsulation , di cui imparerai di più nel prossimo capitolo.
Nota: per impostazione predefinita, tutti i membri di una classe sono private
se non specifichi uno specificatore di accesso:
Esempio
class
MyClass {
int x; // Private attribute
int y; // Private attribute
};