Modificatori di accesso in C++
I modificatori di accesso lo sono parole chiave speciali in C++ che controllano la visibilità dei membri della classe (dati e funzioni).
Aiutano a implementare l'occultamento dei dati limitando o consentendo l'accesso a determinate parti di una classe.
Discutiamone uno per uno
1. Specificatore pubblico
Lo specificatore pubblico rende i membri della classe (variabili e funzioni) accessibili da qualsiasi luogo: all'interno della classe all'esterno della classe o anche da altri file.
2. Specificatore privato
Lo specificatore privato rende accessibili i membri della classe solo all'interno della classe stessa (principalmente metodi membro) e viene utilizzato principalmente per nascondere i dati dall'esterno in modo da poter apportare modifiche internamente in seguito senza modificare il codice dei suoi utenti. Per impostazione predefinita, tutti i membri della classe in C++ sono privati se non viene menzionato alcun specificatore.
CPP #include using namespace std ; class Employee { private : // salary and empId cannot be accessed // from outside the Class double salary ; int empID ; public : string name ; // Name can be accessed anywhere Employee ( string n double s int id ) { name = n ; salary = s ; empID = id ; } }; int main () { Employee emp ( 'Fedrick' 50000 101 ); cout < < 'Name: ' < < emp . name < < endl ; return 0 ; }
Produzione
Name: Fedrick
Cosa succede se proviamo ad accedere ai membri privati?
Il codice fornisce un errore del compilatore come possiamo vedere di seguito.
C++ #include using namespace std ; class Employee { private : double salary ; int empID ; public : string name ; // Constructor Employee ( string n double s int id ) { name = n ; salary = s ; empID = id ; } }; int main () { Employee emp ( 'Fedrick' 50000 101 ); cout < < emp . salary < < endl ; return 0 ; }
Produzione
compilation error
prog.cpp: In function ‘int main()’:
prog.cpp:22:17: error: ‘double Employee::salary’ is private within this context
cout < < emp.salary < < endl;
^~~~~~
prog.cpp:6:12: note: declared private here
double salary;
^~~~~~3. Specificatore protetto
- Lo specificatore protected rende i membri accessibili all'interno della classe stessa e nel suo file derivato classi (figlie) ma non formano codice esterno.
- Viene utilizzato principalmente nell'ereditarietà consentendo alle classi figlie di riutilizzare o modificare dati e funzioni mantenendoli comunque nascosti al mondo esterno.
#include using namespace std ; class Employee { private : double salary ; protected : int empID ; public : string name ; Employee ( string n double s int id ) { name = n ; salary = s ; empID = id ; } }; // Derived class (inherits from Employee) class Manager : public Employee { public : Manager ( string n double s int id ) : Employee ( n s id ) {} void showDetails () { cout < < 'Manager Name: ' < < name < < endl ; cout < < 'Manager ID: ' < < empID < < endl ; } }; int main () { Employee emp ( 'Fedrick' 50000 101 ); cout < < 'Employee Name: ' < < emp . name < < endl ; Manager m ( 'Rohit' 70000 102 ); m . showDetails (); return 0 ; }
Produzione
Employee Name: Fedrick Manager Name: Rohit Manager ID: 102
Crea quizNota : Questo accesso tramite ereditarietà può alterare il modificatore di accesso degli elementi della classe base nella classe derivata a seconda del modalità di eredità .