Modificatori de acces în C++
Modificatorii de acces sunt cuvinte cheie speciale în C++ care controlează vizibilitatea membrilor clasei (date și funcții).
Ele ajută la implementarea ascunderii datelor prin restricţionarea sau permiţând accesul la anumite părţi ale unei clase.
Să o discutăm unul câte unul
1. Specificator public
Specificatorul public face membrii clasei (variabile și funcții) accesibili de oriunde - în interiorul clasei în afara clasei sau chiar în alte fișiere.
2. Specificator privat
Specificatorul privat face ca membrii clasei să fie accesibili numai în interiorul clasei în sine (în principal metodele membrilor) și este folosit în principal pentru a ascunde datele din exterior, astfel încât să putem face modificări interne mai târziu, fără a modifica codul utilizatorilor săi. În mod implicit, toți membrii clasei în C++ sunt privați dacă nu este menționat niciun specificator.
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 ; }
Ieșire
Name: Fedrick
Ce se întâmplă dacă încercăm să accesăm membrii privați?
Codul dă o eroare a compilatorului, așa cum putem vedea mai jos.
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 ; }
Ieșire
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. Specificator protejat
- Specificatorul protejat face membrii accesibili în interiorul clasei în sine și în ea derivat clase (copil), dar nu formează cod în afara.
- Este folosit în principal în moștenire, permițând claselor copil să refolosească sau să modifice datele și funcțiile, păstrându-le ascunse de lumea exterioară.
#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 ; }
Ieșire
Employee Name: Fedrick Manager Name: Rohit Manager ID: 102
Creați un testNota : Acest acces prin moștenire poate modifica modificatorul de acces al elementelor clasei de bază din clasa derivată în funcție de modul de moștenire .