Cita:
Iniciado por dehm Gracias xKuZz, por la respuesta. Hice algunas pruebas pero no consigo entender esto del const al final.
Reduciendo la pregunta un poco en plan "hoygan", ¿qué hace realmente el const al final?
Ese último const indica que la función no va a modificar el estado del objeto.
Dicho con otras palabras: Si etiquetas una función miembro como const entonces esa función no podrá modificar ninguna variable miembro así como tapoco podrá llamar a funciones no const de la clase.
La excepciones son las siguientes:
- Variables estáticas: no afectan al estado del objeto, luego podrán modificarse desde cualquier función, sea const, no const o estática.
- Funciones estáticas: Dado que lo estático no afecta al estado del objeto (son elementos compartidos por todos los objetos de ese tipo), no pueden ser etiquetadas como const. Además estas funciones podrán ser llamadas desde funciones miembro const.
- variables mutable: mutable es una palabra reservada que indica que la variable en cuestión no se ve afectada por los modificadores "const". Tiene otras connotaciones pero no vienen al caso.
Un pequeño ejemplo:
Código C++:
Ver originalstruct POO
{
int var;
mutable int mutVar;
static int staticVar;
void do()
{
test(); // ok
testConst(); // ok
}
void doConst() const
{
test(); // error. doConst es const y no puede llamar a funciones no-const
testConst();
}
void test()
{
var = 5; // ok
mutVar = 5; // ok
staticVar = 5; // ok
staticFunc(); // ok
}
void testConst() const
{
var = 5; // error. testConst es const y no puede modificar el estado del objeto
mutVar = 5; // ok
staticVar = 5; // ok. Los miembros estáticos no afectan al estado del objeto
staticFunc(); // ok
}
static void staticConstFunc() const; // Error. Las funciones estáticas no pueden ser const
static void staticFunc()
{}
};
int POO::staticVar = 0;
Un saludo.