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.
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