Clases
Las clases en C++ son un concepto fundamental en la programación orientada a objetos (POO). Proporcionan una forma estructurada de definir objetos que encapsulan datos y comportamiento relacionados. En este post, exploraremos las clases en C++ y aprenderemos cómo utilizarlas de manera efectiva.
Definición de una clase en C++
Una clase en C++ se define utilizando la palabra clave class
seguida del nombre de la clase. Aquí tienes un ejemplo básico de cómo se ve la definición de una clase en C++:
Dentro de las clases podemos declarar tanto variables como funciones, aunque a las funciones. se les suelen llamar métodos. Aunque se puede definer el código y valores de las variables dentro de la clase es buena practica hacerlo en su correspondiente .cpp
.
Es buena practica declarar las variables privadas de la clase con una barra baja, para poder diferecniarlas de l rresto de las variables.
Modificadores de acceso
Estos modificadores determinan la accesibilidad de los miembros (variables y funciones) de una clase y ayudan a establecer los niveles de encapsulamiento y protección en el código.
Modificador de acceso public
public
El modificador de acceso public
permite que los miembros de una clase sean accesibles desde cualquier parte del programa, ya sea dentro o fuera de la clase. Esto significa que los miembros públicos son visibles para todos y pueden ser accedidos y modificados directamente.
Los miembros públicos son accesibles desde cualquier parte del programa, tanto dentro como fuera de la clase.
En este ejemplo, variablePublica
es una variable miembro pública que se puede acceder y modificar directamente desde fuera de la clase. funcionPublica
es una función miembro pública que también se puede llamar desde fuera de la clase.
El modificador de acceso public
es útil cuando queremos permitir un acceso amplio a los miembros de la clase o cuando necesitamos que los miembros sean utilizados por otros componentes del programa.
Modificador de acceso private
private
El modificador de acceso private
restringe el acceso a los miembros de una clase solo a la propia clase. Los miembros privados no pueden ser accedidos o modificados directamente desde fuera de la clase.
Los miembros privados solo son accesibles desde dentro de la propia clase y no se pueden acceder directamente desde fuera de la clase. Por defecto las varibles y metodos son privados.
En este ejemplo, variablePrivada
es una variable miembro privada que solo puede ser accedida y modificada desde dentro de la clase. funcionPrivada
es una función miembro privada que solo puede ser llamada desde dentro de la clase.
El modificador de acceso private
es útil cuando queremos ocultar los detalles internos de una clase y restringir el acceso directo a los miembros. Esto nos permite tener un mayor control sobre cómo se manipulan los datos y evita modificaciones inapropiadas desde fuera de la clase.
Modificador de acceso protected
protected
El modificador de acceso protected
es similar al modificador private
, ya que restringe el acceso a los miembros de una clase. Sin embargo, a diferencia de private
, los miembros protegidos también pueden ser accedidos por las clases derivadas.
Los miembros protegidos son accesibles desde dentro de la propia clase y en las clases derivadas, pero no se pueden acceder directamente desde fuera de la jerarquía de clases.
En este ejemplo, variableProtegida
es una variable miembro protegida que puede ser accedida y modificada en la clase derivada ClaseDerivada
, ya que se hereda de ClaseBase
.
Constructores y destructores
Los constructores y destructores son métodos especiales de una clase en C++ que se utilizan para inicializar y liberar recursos de un objeto, respectivamente.
Cosntructores y destructors predefinidios
Si no se proporciona un constructor personalizado, se generará automáticamente un constructor predeterminado sin parámetros. Este constructor simplemente inicializa las variables miembro con valores predeterminados.
Aun así, es buena practica declarar el constructor vacio, al igual que el destructor:
Constructores y Destructores Personalizados en C++
Un constructor, al contrario que un destructor, puede tener parámetros, lo que nos permite inicializar las variables miembro con valores específicos al crear un objeto.
También Es posible definir un destructor personalizado para realizar tareas de limpieza específicas antes de que un objeto se destruya. Esto es especialmente útil cuando se han asignado recursos que deben ser liberados adecuadamente.
Constructor Initializer List
La lista de inicialización de constructor es una sección especial dentro de la definición del constructor de una clase en C++. Se coloca antes del cuerpo del constructor y utiliza la sintaxis de una lista separada por comas para asignar valores a los miembros de la clase.
En el ejemplo anterior, la lista de inicialización de constructor : miEntero(entero), miFloat(flotante)
asigna los valores pasados como argumentos entero
y flotante
a los miembros correspondientes miEntero
y miFloat
de la clase MiClase
.
La lista de inicialización de constructor proporciona varias ventajas en términos de rendimiento y claridad del código:
Eficiencia: Al utilizar la lista de inicialización, los miembros de la clase se inicializan directamente con los valores proporcionados, lo que evita la necesidad de asignarlos en el cuerpo del constructor. Esto puede resultar en una mayor eficiencia, especialmente cuando se trata de tipos de datos complejos o costosos de inicializar.
Orden de inicialización: La lista de inicialización de constructor permite especificar el orden en que se inicializan los miembros de la clase. Esto es útil cuando los miembros dependen entre sí y es importante establecer un orden específico de inicialización.
Miembros constantes y de referencia: Algunos miembros de clase, como variables constantes o referencias, solo se pueden inicializar en la lista de inicialización de constructor. No es posible asignarles valores en el cuerpo del constructor.
Getters y Setters
Los getters y setters son métodos utilizados para acceder y modificar los valores de variables miembro de una clase desde fuera de la misma. Proporcionan un mecanismo para encapsular el acceso a los datos y mantener el principio de ocultamiento de información en la programación orientada a objetos.
Getters
Un getter es un método que se utiliza para obtener el valor de una variable miembro de una clase. Su nombre suele comenzar con la palabra "get" seguida del nombre de la variable miembro.
En este ejemplo, se define un getter llamado getMiVariable()
que devuelve el valor de la variable miembro miVariable
.
Setters
Un setter es un método que se utiliza para modificar el valor de una variable miembro de una clase. Su nombre suele comenzar con la palabra "set" seguida del nombre de la variable miembro.
En este ejemplo, se define un setter llamado setMiVariable()
que recibe un parámetro valor
y asigna ese valor a la variable miembro miVariable
.
Static
La palabra clave static
se utiliza en C++ para declarar elementos que son compartidos por todas las instancias de una clase en lugar de ser específicos de cada objeto individual. Estos elementos se asocian con la clase en sí y no con las instancias de la clase.
Variables estáticas
Una variable estática se declara utilizando la palabra clave static
en el contexto de una clase. Estas variables existen en un solo lugar en la memoria, independientemente del número de objetos que se creen.
Una variable estática es una variable global que se comparte entre todos los objetos y a al que puedes acceder sin haber declarado ningún objeto.
En este ejemplo, se declara una variable estática llamada contador
dentro de la clase MiClase
.
Las variables estáticas se acceden utilizando el nombre de la clase seguido del operador de resolución de ámbito (::
). No es necesario crear una instancia de la clase para acceder a ellas.
En este ejemplo, se inicializa y se accede a la variable estática contador
de la clase MiClase
.
Métodos estáticos
Un método estático es aquel que se declara utilizando la palabra clave static
. Estos métodos no operan sobre objetos individuales, sino que se asocian con la clase en sí y no pueden acceder a variables miembro no estáticas.
En este ejemplo, se define un método estático llamado metodoEstatico()
en la clase MiClase
.
Los métodos estáticos se invocan utilizando el nombre de la clase seguido del operador de resolución de ámbito (::
). No es necesario crear una instancia de la clase para invocarlos.
En este ejemplo, se invoca el método estático metodoEstatico()
de la clase MiClase
.
Last updated