Junior
¿Qué sabes sobre métodos constantes y no constantes?
sobes.tech AI
Respuesta de la IA
Los métodos constantes (const methods) en C++ son métodos de clase que se declaran con la palabra clave const después de la lista de parámetros.
class MyClass {
public:
void nonConstMethod(); // Método no constante
void constMethod() const; // Método constante
};
La palabra clave const después de la lista de parámetros garantiza que el método no modificará el estado del objeto para el cual se llama. Esto significa que dentro de un método constante:
- No se pueden modificar los miembros de datos no estáticos del objeto.
- Solo se pueden llamar a otros métodos constantes del mismo objeto.
Propósito de los métodos constantes:
- Seguridad: Previenen cambios accidentales en el estado del objeto.
- Uso con objetos constantes: Los objetos constantes (declarados con
const) solo pueden llamar a métodos constantes. Los métodos no constantes no están disponibles para ellos. - Sobrecarga: Los métodos pueden ser sobrecargados por constancia. Esto permite tener dos métodos con el mismo nombre y firma de parámetros, pero uno será constante y el otro no. El compilador elegirá la versión adecuada dependiendo de si el método se llama en un objeto constante o no.
class MyClass {
int value;
public:
int getValue() const { // Versión constante
return value;
}
int getValue() { // Versión no constante
return value++; // Posibilidad de modificar el estado
}
};
void test(const MyClass& objConst, MyClass& objNonConst) {
objConst.getValue(); // Se llama a la versión const
objNonConst.getValue(); // Se llama a la versión no constante
}
Métodos no constantes:
Son métodos normales de la clase que pueden modificar el estado del objeto. Se declaran sin la palabra clave const después de la lista de parámetros.
Uso:
| Tipo de objeto | Llamada al método | Qué método será llamado | Explicación |
|---|---|---|---|
const T |
obj.method() |
Solo el método constante | No se puede modificar el estado del objeto constante. |
T |
obj.method() |
Método no constante (si existe) | Los métodos no constantes pueden modificar el estado. |
T |
obj.method() const |
Método constante (si existe) | Si hay ambas versiones y se llama en un objeto no constante, la prioridad la tiene la no constante. Pero se puede hacer explícitamente un cast al objeto si se desea llamar a la versión constante (poco común). |
El uso de la constancia es una buena práctica, ya que mejora la legibilidad y seguridad del código, además de permitir al compilador realizar optimizaciones adicionales.