Модифікатори доступу в C++
Модифікатори доступу є спеціальні ключові слова у C++, які контролюють видимість членів класу (даних і функцій).
Вони допомагають реалізувати приховування даних, обмежуючи або дозволяючи доступ до певних частин класу.
Давайте обговоримо це по черзі
1. Відкритий специфікатор
Специфікатор Public робить члени класу (змінні та функції) доступними з будь-якого місця - всередині класу за межами класу або навіть з інших файлів.
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
Створіть вікторинуПримітка : Цей доступ через успадкування може змінити модифікатор доступу до елементів базового класу в похідному класі залежно від режим успадкування .