Función miembro const en C++

Muhammad Husnain 12 octubre 2023
Función miembro const en C++

Este artículo trata sobre el uso de funciones miembro constantes en C++. Usamos la palabra clave const para hacer que cualquier objeto, variable o función sea constante.

Como cualquier otra variable u objeto, las funciones miembro de una clase también se pueden hacer const. Ciertas reglas y regulaciones para tales funciones serán discutidas en este artículo.

Función miembro Const en C++

Const es un calificador de tipo, una palabra clave utilizada con un tipo de datos que indica que los datos son de solo lectura. Si bien se puede usar para declarar constantes, Const difiere de las construcciones comparables en otros lenguajes en que es parte del tipo y, por lo tanto, tiene un comportamiento complicado cuando se combina con punteros, referencias, tipos de datos compuestos y verificación de tipos.

Las funciones miembro Const se declaran como constantes en el programa. El objeto al que hacen referencia estas funciones no se puede cambiar.

Es recomendable utilizar la palabra clave const para evitar cambios no intencionados en el objeto. Cualquier objeto puede llamar a una función miembro const.

Solo los objetos no constantes pueden llamar funciones no constantes. Si declaramos el objeto de una clase como un objeto const, solo puede llamar a las funciones miembro const, mientras que un objeto non-const puede llamar a todas las funciones miembro const o non-const.

La sintaxis para hacer una función const es:

return -datatype function_name() const;

Considere el siguiente ejemplo.

#include <iostream>
using namespace std;
class Data {
  int val;

 public:
  Data(int a = 0) { val = a; }
  int getValue() const { return val; }
};
int main() {
  Data d(10);
  cout << d.getValue();
  return 0;
}

Hemos declarado una clase Data con un constructor y una función miembro getValue() en este segmento de código. Esta función es una función const por lo que no puede cambiar el valor del miembro de datos.

Si modifica los datos de cualquier miembro de datos, el compilador generará un error. El puntero this en esta función es un puntero a un objeto const proporcionado a una función miembro const.

Esto garantiza que el puntero no se pueda utilizar para modificar los miembros de datos del objeto. Cualquier intento de modificar un miembro de datos de un objeto llamado método constante y cualquier intento de llamar a una función miembro no constante para ese objeto dará como resultado un error de sintaxis.

Una función miembro constante puede tener sobrecargada una versión no constante. El compilador determina qué versión usar en función de si lo llama un objeto const o un objeto non-const.

Los constructores y destructores Const nunca se pueden declarar. Siempre pueden cambiar un miembro de datos, incluso si el objeto mismo es constante.

Las funciones miembro estáticas no se pueden definir como const. La palabra clave const afecta la referencia de puntero this proporcionada a una función miembro, pero las funciones miembro estáticas no tienen uno porque se pueden llamar sin un objeto.

También es posible relajar la limitación de la función const que evita que la función escriba en cualquier variable de clase. Estas variables de clase están marcadas con la palabra clave mutable para permitir que se puedan escribir incluso cuando la función está marcada como una función const.

Si una variable de clase está marcada como mutable y una función const escribe en ella, el código se compilará correctamente y la variable se podrá cambiar (C++11).

Cambiar la ubicación de la palabra clave const en una declaración de C++ tiene una semántica completamente distinta, como es típico cuando se trabaja con la palabra clave const. El uso anterior de const solo se aplica cuando const se coloca al final de la declaración de la función después de los paréntesis.

Muhammad Husnain avatar Muhammad Husnain avatar

Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.

LinkedIn