Модификатори за достъп в C++

Модификатори за достъп в 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 прави членовете достъпни в самия клас и в неговия получени (дете) класове, но не формират външен код.
  • Използва се главно при наследяване, позволявайки на дъщерните класове да използват повторно или да променят данни и функции, като същевременно ги пазят скрити от външния свят.
CPP
   #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  


Забележка : Този достъп чрез наследяване може да промени модификатора за достъп на елементите на базовия клас в производния клас в зависимост от режим на наследяване .

Създаване на тест