Modificatori di accesso in C++

Modificatori di accesso in C++

I modificatori di accesso lo sono parole chiave speciali in C++ che controllano la visibilità dei membri della classe (dati e funzioni).
Aiutano a implementare l'occultamento dei dati limitando o consentendo l'accesso a determinate parti di una classe.

tipi_di_modificatore_di_accesso

Discutiamone uno per uno

1. Specificatore pubblico

Lo specificatore pubblico rende i membri della classe (variabili e funzioni) accessibili da qualsiasi luogo: all'interno della classe all'esterno della classe o anche da altri file.

2. Specificatore privato

Lo specificatore privato rende accessibili i membri della classe solo all'interno della classe stessa (principalmente metodi membro) e viene utilizzato principalmente per nascondere i dati dall'esterno in modo da poter apportare modifiche internamente in seguito senza modificare il codice dei suoi utenti. Per impostazione predefinita, tutti i membri della classe in C++ sono privati ​​se non viene menzionato alcun specificatore.

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

Produzione
Name: Fedrick  

Cosa succede se proviamo ad accedere ai membri privati?

Il codice fornisce un errore del compilatore come possiamo vedere di seguito.

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

Produzione

 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. Specificatore protetto

  • Lo specificatore protected rende i membri accessibili all'interno della classe stessa e nel suo file derivato classi (figlie) ma non formano codice esterno.
  • Viene utilizzato principalmente nell'ereditarietà consentendo alle classi figlie di riutilizzare o modificare dati e funzioni mantenendoli comunque nascosti al mondo esterno.
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  ;   }   

Produzione
Employee Name: Fedrick Manager Name: Rohit Manager ID: 102  


Nota : Questo accesso tramite ereditarietà può alterare il modificatore di accesso degli elementi della classe base nella classe derivata a seconda del modalità di eredità .

Crea quiz