Modificadores de acceso en C++

Modificadores de acceso en C++

Los modificadores de acceso son palabras clave especiales en C++ que controlan la visibilidad de los miembros de la clase (datos y funciones).
Ayudan a implementar la ocultación de datos restringiendo o permitiendo el acceso a ciertas partes de una clase.

tipos_de_modificador_de_acceso

Discutamos uno por uno.

1. Especificador público

El especificador público hace que los miembros de la clase (variables y funciones) sean accesibles desde cualquier lugar: dentro de la clase, fuera de la clase o incluso desde otros archivos.

2. Especificador privado

El especificador privado hace que los miembros de la clase sean accesibles solo dentro de la clase misma (principalmente métodos de miembros) y se usa principalmente para ocultar datos desde el exterior para que podamos realizar cambios internamente más adelante sin cambiar el código de sus usuarios. De forma predeterminada, todos los miembros de la clase en C++ son privados si no se menciona ningún 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  ;   }   

Producción
Name: Fedrick  

¿Qué pasa si intentamos acceder a miembros privados?

El código da un error del compilador como podemos ver a continuación.

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

Producción

 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 protegido

  • El especificador protected hace que los miembros sean accesibles dentro de la clase misma y en su derivado clases (secundarias) pero no forman código externo.
  • Se utiliza principalmente en herencia, lo que permite a las clases secundarias reutilizar o modificar datos y funciones mientras los mantiene ocultos del mundo 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  ;   }   

Producción
Employee Name: Fedrick Manager Name: Rohit Manager ID: 102  


Nota : Este acceso por herencia puede alterar el modificador de acceso de los elementos de la clase base en la clase derivada dependiendo del modo de herencia .

Crear cuestionario