Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Elementos const

Estas en el tema de Elementos const en el foro de C/C++ en Foros del Web. Una pregunta. En una clase cualquiera tengo: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código C++: Ver original class x {             private :   ...
  #1 (permalink)  
Antiguo 15/08/2011, 16:01
 
Fecha de Ingreso: marzo-2011
Mensajes: 94
Antigüedad: 13 años, 1 mes
Puntos: 3
Elementos const

Una pregunta. En una clase cualquiera tengo:
Código C++:
Ver original
  1. class x{
  2.             private:
  3.                         int *ptr;
  4.                         int tamanio;
  5. };

Si tengo una funcion publica:
Código C++:
Ver original
  1. int &devolvertamanio () const{
  2.      retur tamanio;
  3. } // Da error!! tiene que ser const int&devolvertamanio () const
Código C++:
Ver original
  1. int &operator[] ( const int &subindice ) const{
  2.      return ptr[subindice];
  3. }//No da error

porque el primero si da error y la segunda no? en realidad devuelvo un objeto int con un objeto const. es porque ptr[subindice] esta en una direccion de memoria que no pertenece al objeto que le estoy pasando?

Un saludo!
  #2 (permalink)  
Antiguo 15/08/2011, 16:36
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Elementos const

2 explicaciones, una mas formal que la otra:

Cuando defines un método const todos los miembros son const, no puedes devolver el miembro "tamanio" como si fuese un int& porque en realidad es un const int&. Lo mismo ocurre con ptr. Tambien es const. Pero no estas devolviendo a ptr, sino que la usas para devolver algo mas.

Es similar a tener un papel con la direccion de mi casa y querer pintar mi casa pintando el papel. ¿Se pinta mi casa? Claro que no. Con el papel podrias llegar a mi casa, y pintarla, o hacer lo que quieras.

Al hacer const indicas que no modificarás el papel, y eso es lo que haces, tu no retornas el papel, sino que vas a la casa y retornas algo de ahi (usando la expresion ptr[subindice]) , que sí es modificable.

Última edición por CalgaryCorpus; 16/08/2011 a las 11:20

Etiquetas: const, elementos, funcion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:21.