C++ Especificadores de acceso
Especificadores de acceso
A estas alturas, ya está bastante familiarizado con la palabra clave public
que aparece en todos nuestros ejemplos de clases:
Ejemplo
class MyClass { // La clase
public: // Especificador de acceso
// los miembros de la clase van aquí
};
Inténtalo tú mismo »
La palabra clave public
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
- no se puede acceder a los miembros (ni verlos) 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: // Especificador de acceso público
int x; // Atributo público
private: // Especificador de acceso privado
int y; // atributo privado
};
int main() {
MyClass myObj;
myObj.x = 25; // Permitido (public)
myObj.y = 50; // No permitido (private)
return 0;
}
Si intentas 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. Consulte el siguiente capítulo (Encapsulación) sobre cómo hacer esto.
Consejo: Se considera una buena práctica declarar los atributos de su clase como privados (tan a menudo como sea 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; // atributo privado
int y; // atributo privado
};