Modificadors d'accés en C++

Modificadors d'accés en C++

Els modificadors d'accés són paraules clau especials en C++ que controlen la visibilitat dels membres de la classe (dades i funcions).
Ajuden a implementar l'ocultació de dades restringint o permetent l'accés a determinades parts d'una classe.

modificador_de_tipus_d

Comentem-ho un per un

1. Especificador públic

L'especificador públic fa que els membres de la classe (variables i funcions) siguin accessibles des de qualsevol lloc: dins de la classe fora de la classe o fins i tot altres fitxers.

2. Especificador privat

L'especificador privat fa que els membres de la classe siguin accessibles només dins de la mateixa classe (principalment mètodes de membres) i s'utilitza principalment per ocultar dades des de l'exterior perquè puguem fer canvis internament més tard sense canviar el codi dels seus usuaris. Per defecte, tots els membres de la classe en C++ són privats si no s'esmenta cap especificador.

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

Sortida
Name: Fedrick  

Què passa si intentem accedir a membres privats?

El codi dóna un error del compilador com podem veure a continuació.

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

Sortida

 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. Especificador protegit

  • L'especificador protegit fa que els membres siguin accessibles dins de la pròpia classe i en la seva derivats classes (infantils), però no formen codi extern.
  • S'utilitza principalment en l'herència, permetent que les classes fills puguin reutilitzar o modificar dades i funcions, mantenint-les ocultes del món exterior.
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  ;   }   

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


Nota : Aquest accés mitjançant herència pot alterar el modificador d'accés dels elements de classe base en classe derivada en funció de la modalitat d'herència .

Crea un qüestionari