Модификатори за достъп в C++
Модификаторите за достъп са специални ключови думи в C++, които контролират видимостта на членовете на класа (данни и функции).
Те помагат при прилагането на скриване на данни, като ограничават или разрешават достъп до определени части от клас.
Нека да го обсъдим един по един
1. Публичен спецификатор
Публичният спецификатор прави членовете на класа (променливи и функции) достъпни отвсякъде - вътре в класа извън класа или дори други файлове.
2. Частен спецификатор
Частният спецификатор прави членовете на класа достъпни само вътре в самия клас (главно методите на членове) и се използва главно за скриване на данни отвън, така че да можем да правим вътрешни промени по-късно, без да променяме кода на неговите потребители. По подразбиране всички членове на класа в C++ са частни, ако не е споменат спецификатор.
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 ; }
Изход
Name: Fedrick
Какво се случва, ако се опитаме да получим достъп до лични членове?
Кодът дава грешка на компилатора, както можем да видим по-долу.
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 ; }
Изход
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. Защитен спецификатор
- Спецификаторът protected прави членовете достъпни в самия клас и в неговия получени (дете) класове, но не формират външен код.
- Използва се главно при наследяване, позволявайки на дъщерните класове да използват повторно или да променят данни и функции, като същевременно ги пазят скрити от външния свят.
#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 ; }
Изход
Employee Name: Fedrick Manager Name: Rohit Manager ID: 102
Създаване на тестЗабележка : Този достъп чрез наследяване може да промени модификатора за достъп на елементите на базовия клас в производния клас в зависимост от режим на наследяване .