Modifikatori pristupa u C++
Modifikatori pristupa su posebne ključne riječi u C++ koji kontroliraju vidljivost članova klase (podaci i funkcije).
Oni pomažu u implementaciji skrivanja podataka ograničavanjem ili dopuštanjem pristupa određenim dijelovima klase.
Raspravljajmo o tome jedan po jedan
1. Javni specifikator
Javni specifikator čini članove klase (varijable i funkcije) dostupnima s bilo kojeg mjesta - unutar klase izvan klase ili čak iz drugih datoteka.
2. Privatni specifikacija
Privatni specifikator čini članove klase dostupnima samo unutar same klase (uglavnom metode članova) i uglavnom se koristi za skrivanje podataka izvana tako da kasnije možemo unijeti promjene interno bez mijenjanja koda njegovih korisnika. Prema zadanim postavkama svi članovi klase u C++ su privatni ako se ne spominje specifikator.
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 ; }
Izlaz
Name: Fedrick
Što se događa ako pokušamo pristupiti privatnim članovima?
Kod daje pogrešku prevoditelja kao što vidimo ispod.
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 ; }
Izlaz
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. Zaštićeni specifikacija
- Specifikator protected čini članove dostupnima unutar same klase i u njezinoj izvedeno (dijete) klase, ali ne i vanjski kod.
- Uglavnom se koristi u nasljeđivanju dopuštajući podređenim klasama da ponovno koriste ili mijenjaju podatke i funkcije dok ih i dalje drže skrivenima od vanjskog svijeta.
#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 ; }
Izlaz
Employee Name: Fedrick Manager Name: Rohit Manager ID: 102
Napravi kvizBilješka : Ovaj pristup putem nasljeđivanja može promijeniti modifikator pristupa elementima osnovne klase u izvedenoj klasi ovisno o način nasljeđivanja .