Modifikátory přístupu v C++
Modifikátory přístupu jsou speciální klíčová slova v C++, které řídí viditelnost členů třídy (dat a funkcí).
Pomáhají při implementaci skrývání dat omezením nebo povolením přístupu k určitým částem třídy.
Pojďme to probrat jeden po druhém
1. Veřejný specifikátor
Public specifier zpřístupňuje členy třídy (proměnné a funkce) odkudkoli - uvnitř třídy mimo třídu nebo dokonce z jiných souborů.
2. Soukromý specifikátor
Private specifier zpřístupňuje členy třídy pouze uvnitř třídy samotné (hlavně členské metody) a používá se hlavně ke skrytí dat zvenčí, abychom mohli později provádět změny interně, aniž bychom měnili kód jejích uživatelů. Ve výchozím nastavení jsou všichni členové třídy v C++ soukromé, pokud není uveden žádný specifiká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
Co se stane, když se pokusíme získat přístup k soukromým členům?
Kód dává chybu kompilátoru, jak můžeme vidět níže.
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áněný specifikátor
- Chráněný specifikátor zpřístupňuje členy uvnitř třídy samotné a v ní odvozený (dítě) třídy, ale netvořit vnější kód.
- Používá se hlavně v dědičnosti, která umožňuje podřízeným třídám znovu používat nebo upravovat data a funkce, přičemž je stále chrání před vnějším světem.
#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
Vytvořit kvízPoznámka : Tento přístup prostřednictvím dědičnosti může změnit modifikátor přístupu prvků základní třídy v odvozené třídě v závislosti na způsob dědičnosti .