Los modificadores de acceso se utilizan para implementar un aspecto importante de la programación orientada a objetos conocida como ocultación de datos . Considere un ejemplo de la vida real:
El Ala de Investigación y Análisis (R&AW), que tiene 10 miembros principales, ha tomado posesión de información confidencial sensible sobre la seguridad nacional. Ahora podemos correlacionar estos miembros principales con miembros de datos o funciones de miembros de una clase, que a su vez se pueden correlacionar con el ala R&A. Estos 10 miembros pueden acceder directamente a la información confidencial de su ala (la clase), pero nadie, aparte de estos 10 miembros, puede acceder a esta información directamente, es decir, las funciones externas que no sean las predominantes en la propia clase no pueden acceder a la información. (que no tiene derecho a ellos) sin tener privilegios asignados (como los que posee una clase amiga o una clase heredada, como se verá en este artículo más adelante) o acceso a uno de estos 10 miembros a los que se les permite el acceso directo a la información confidencial (similar a cómo se puede acceder a los miembros privados de una clase en el mundo exterior a través de funciones de miembros públicos de la clase que tener acceso directo a miembros privados). Así es la ocultación de datos en la práctica.
Los modificadores de acceso o los especificadores de acceso en una clase se utilizan para asignar la accesibilidad a los miembros de la clase, es decir, establecen algunas restricciones en los miembros de la clase para que las funciones externas no puedan acceder directamente a ellos.
Hay 3 tipos de modificadores de acceso disponibles en C++:
- Público
- Privado
- Protegido
Nota : si no especificamos ningún modificador de acceso para los miembros dentro de la clase, entonces, de forma predeterminada, el modificador de acceso para los miembros será Privado .
Veamos ahora cada uno de estos modificadores de acceso en detalle:
1. Público : Todos los miembros de la clase declarados bajo el especificador público estarán disponibles para todos. Los miembros de datos y las funciones miembro declaradas como públicas también pueden ser accedidas por otras clases y funciones. Se puede acceder a los miembros públicos de una clase desde cualquier parte del programa utilizando el operador de acceso directo a miembros (.) con el objeto de esa clase.
Ejemplo:
CPP
// C++ program to demonstrate public // access modifier #include<iostream> using namespace std; // class definition class Circle { public: double radius; double compute_area() { return 3.14*radius*radius; } }; // main function int main() { Circle obj; // accessing public datamember outside class obj.radius = 5.5; cout << "Radius is: " << obj.radius << "\n"; cout << "Area is: " << obj.compute_area(); return 0; }
Producción:
Radius is: 5.5 Area is: 94.985
En el programa anterior, el radio del miembro de datos se declara como público, por lo que se puede acceder a él fuera de la clase y, por lo tanto, se le permite el acceso desde dentro de main().
2. Privado : los miembros de la clase declarados como privados solo pueden ser accedidos por las funciones miembro dentro de la clase. No se permite el acceso directo a ellos por ningún objeto o función fuera de la clase. Solo las funciones miembro o las funciones amigas pueden acceder a los datos privados de los miembros de la clase.
Ejemplo:
CPP
// C++ program to demonstrate private // access modifier #include<iostream> using namespace std; class Circle { // private data member private: double radius; // public member function public: double compute_area() { // member function can access private // data member radius return 3.14*radius*radius; } }; // main function int main() { // creating object of the class Circle obj; // trying to access private data member // directly outside the class obj.radius = 1.5; cout << "Area is:" << obj.compute_area(); return 0; }
Salida :
In function 'int main()': 11:16: error: 'double Circle::radius' is private double radius; ^ 31:9: error: within this context obj.radius = 1.5; ^
El resultado del programa anterior es un error de tiempo de compilación porque no se nos permite acceder a los miembros de datos privados de una clase directamente desde fuera de la clase. Sin embargo, se intentó acceder a obj.radius, pero al ser el radio un miembro de datos privados, obtuvimos el error de compilación anterior.
Sin embargo, podemos acceder a los miembros de datos privados de una clase indirectamente usando las funciones de miembros públicos de la clase.
Ejemplo:
CPP
// C++ program to demonstrate private // access modifier #include<iostream> using namespace std; class Circle { // private data member private: double radius; // public member function public: void compute_area(double r) { // member function can access private // data member radius radius = r; double area = 3.14*radius*radius; cout << "Radius is: " << radius << endl; cout << "Area is: " << area; } }; // main function int main() { // creating object of the class Circle obj; // trying to access private data member // directly outside the class obj.compute_area(1.5); return 0; }
Salida :
Radius is: 1.5 Area is: 7.065
3. Protegido : el modificador de acceso protegido es similar al modificador de acceso privado en el sentido de que no se puede acceder fuera de su clase a menos que sea con la ayuda de una clase amiga. La diferencia es que cualquier subclase (clase derivada) de esa clase también puede acceder a los miembros de la clase declarados como protegidos.
Nota : Este acceso por herencia puede alterar el modificador de acceso de los elementos de clase base en clase derivada dependiendo del modo de Herencia .
Ejemplo:
CPP
// C++ program to demonstrate // protected access modifier #include <bits/stdc++.h> using namespace std; // base class class Parent { // protected data members protected: int id_protected; }; // sub class or derived class from public base class class Child : public Parent { public: void setId(int id) { // Child class is able to access the inherited // protected data members of base class id_protected = id; } void displayId() { cout << "id_protected is: " << id_protected << endl; } }; // main function int main() { Child obj1; // member function of the derived class can // access the protected data members of the base class obj1.setId(81); obj1.displayId(); return 0; }
Salida :
id_protected is: 81
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA