Modificatori de acces în C++

Modificatori de acces în C++

Modificatorii de acces sunt cuvinte cheie speciale în C++ care controlează vizibilitatea membrilor clasei (date și funcții).
Ele ajută la implementarea ascunderii datelor prin restricţionarea sau permiţând accesul la anumite părţi ale unei clase.

tipuri_de_modificator_de_acces

Să o discutăm unul câte unul

1. Specificator public

Specificatorul public face membrii clasei (variabile și funcții) accesibili de oriunde - în interiorul clasei în afara clasei sau chiar în alte fișiere.

2. Specificator privat

Specificatorul privat face ca membrii clasei să fie accesibili numai în interiorul clasei în sine (în principal metodele membrilor) și este folosit în principal pentru a ascunde datele din exterior, astfel încât să putem face modificări interne mai târziu, fără a modifica codul utilizatorilor săi. În mod implicit, toți membrii clasei în C++ sunt privați dacă nu este menționat niciun specificator.

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  ;   }   

Ieșire
Name: Fedrick  

Ce se întâmplă dacă încercăm să accesăm membrii privați?

Codul dă o eroare a compilatorului, așa cum putem vedea mai jos.

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  ;   }   

Ieșire

 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. Specificator protejat

  • Specificatorul protejat face membrii accesibili în interiorul clasei în sine și în ea derivat clase (copil), dar nu formează cod în afara.
  • Este folosit în principal în moștenire, permițând claselor copil să refolosească sau să modifice datele și funcțiile, păstrându-le ascunse de lumea exterioară.
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  ;   }   

Ieșire
Employee Name: Fedrick Manager Name: Rohit Manager ID: 102  


Nota : Acest acces prin moștenire poate modifica modificatorul de acces al elementelor clasei de bază din clasa derivată în funcție de modul de moștenire .

Creați un test