Modifikátory prístupu v C++
Modifikátory prístupu sú špeciálne kľúčové slová v C++, ktoré riadia viditeľnosť členov triedy (údajov a funkcií).
Pomáhajú pri implementácii skrývania údajov obmedzením alebo povolením prístupu k určitým častiam triedy.
Poďme o tom diskutovať jeden po druhom
1. Verejný špecifikátor
Verejný špecifikátor sprístupňuje členov triedy (premenné a funkcie) odkiaľkoľvek – vo vnútri triedy mimo triedy alebo dokonca z iných súborov.
2. Súkromný špecifikátor
Súkromný špecifikátor sprístupňuje členov triedy iba vo vnútri samotnej triedy (hlavne členské metódy) a používa sa hlavne na skrytie údajov zvonku, aby sme mohli neskôr vykonávať zmeny interne bez zmeny kódu jej používateľov. V predvolenom nastavení sú všetci členovia triedy v C++ súkromné, ak nie je uvedený žiadny špecifikátor.
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 ; }
Výstup
Name: Fedrick
Čo sa stane, ak sa pokúsime získať prístup k súkromným členom?
Kód dáva chybu kompilátora, ako vidíme nižšie.
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 ; }
Výstup
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. Chránený špecifikátor
- Chránený špecifikátor sprístupňuje členov vnútri samotnej triedy a v nej odvodené (dieťa) triedy, ale netvoria mimo kódu.
- Používa sa hlavne pri dedení, ktoré umožňuje detským triedam opätovne používať alebo upravovať údaje a funkcie a zároveň ich uchovávať skryté pred vonkajším svetom.
#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 ; }
Výstup
Employee Name: Fedrick Manager Name: Rohit Manager ID: 102
Vytvoriť kvízPoznámka : Tento prístup prostredníctvom dedenia môže zmeniť modifikátor prístupu prvkov základnej triedy v odvodenej triede v závislosti od spôsob dedenia .