Ver Mensaje Individual
  #4 (permalink)  
Antiguo 24/08/2016, 09:13
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 1 mes
Puntos: 204
Respuesta: Referencia a función con cláusula const

Cita:
Iniciado por dehm Ver Mensaje
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 original
  1. struct POO
  2. {
  3.   int var;
  4.   mutable int mutVar;
  5.   static int staticVar;
  6.  
  7.   void do()
  8.   {
  9.      test(); // ok
  10.      testConst(); // ok
  11.   }
  12.  
  13.   void doConst() const
  14.   {
  15.     test(); // error. doConst es const y no puede llamar a funciones no-const
  16.     testConst();
  17.   }
  18.  
  19.   void test()
  20.   {
  21.     var = 5; // ok
  22.     mutVar = 5; // ok
  23.     staticVar = 5; // ok
  24.     staticFunc(); // ok
  25.   }
  26.  
  27.   void testConst() const
  28.   {
  29.     var = 5; // error. testConst es const y no puede modificar el estado del objeto
  30.     mutVar = 5; // ok
  31.     staticVar = 5; // ok. Los miembros estáticos no afectan al estado del objeto
  32.     staticFunc(); // ok
  33.   }
  34.  
  35.   static void staticConstFunc() const; // Error. Las funciones estáticas no pueden ser const
  36.  
  37.   static void staticFunc()
  38.   {}
  39. };
  40.  
  41. int POO::staticVar = 0;

Un saludo.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.