Especificadores de acceso de C++
Especificadores de acceso
A estas alturas, está bastante familiarizado con la public
palabra clave que aparece en todos nuestros ejemplos de clase:
Ejemplo
class MyClass { // The class
public: // Access specifier
// class members goes here
};
La public
palabra clave es un especificador de acceso.
Los especificadores de acceso definen cómo se puede acceder a los miembros (atributos y métodos) de una clase. En el ejemplo anterior, los miembros son public
, lo que significa que se puede acceder a ellos y modificarlos desde fuera del código.
Sin embargo, ¿qué pasa si queremos que los miembros sean privados y estén ocultos del mundo exterior?
En C++, hay tres especificadores de acceso:
public
- los miembros son accesibles desde fuera de la claseprivate
- los miembros no pueden ser accedidos (o vistos) desde fuera de la claseprotected
- No se puede acceder a los miembros desde fuera de la clase, sin embargo, se puede acceder a ellos en clases heredadas. Aprenderá más sobre Herencia más adelante.
En el siguiente ejemplo, demostramos las diferencias entre los miembros public
y private
:
Ejemplo
class
MyClass {
public: // Public access
specifier
int x; // Public attribute
private: // Private access specifier
int y; // Private attribute
};
int main() {
MyClass
myObj;
myObj.x = 25; // Allowed (public)
myObj.y = 50; //
Not allowed (private)
return 0;
}
Si intenta acceder a un miembro privado, se produce un error:
error: y is private
Nota: es posible acceder a miembros privados de una clase utilizando un método público dentro de la misma clase. Vea el siguiente capítulo ( Encapsulación ) sobre cómo hacer esto.
Sugerencia: se considera una buena práctica declarar los atributos de su clase como privados (con la mayor frecuencia posible). Esto reducirá la posibilidad de que usted (u otros) estropeen el código. Este es también el ingrediente principal del concepto de encapsulación , sobre el que aprenderá más en el próximo capítulo.
Nota: De forma predeterminada, todos los miembros de una clase son private
, si no especifica un especificador de acceso:
Ejemplo
class
MyClass {
int x; // Private attribute
int y; // Private attribute
};