Modificadores de acceso en C++

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++: 

  1. Público
  2. Privado
  3. 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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *