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.
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.
#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
Crear cuestionarioNota : 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 .