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

Principiante : método toString()

Estas en el tema de Principiante : método toString() en el foro de C/C++ en Foros del Web. Hola muy buenas. Soy iniciado en c++ recientemente (aunque se programar en otros lenguajes como java). Tengo un problema al intentar sobrecargar un operador <<. ...
  #1 (permalink)  
Antiguo 19/01/2012, 18:00
Avatar de SetheR  
Fecha de Ingreso: enero-2009
Mensajes: 265
Antigüedad: 15 años, 3 meses
Puntos: 44
Principiante : método toString()

Hola muy buenas. Soy iniciado en c++ recientemente (aunque se programar en otros lenguajes como java).

Tengo un problema al intentar sobrecargar un operador <<. Consiste en qe no sé generar un string a partir de un array de enteros.

Estoy intentando implementar un clase "conjunto" (ya sé que existen clases similares ya hechas, sólo quiero aprender), y quiero que al hacer

Código C++:
Ver original
  1. cout << miconjunto <<endl

Me muestre el array que contiene los datos del conjunto por pantalla.
Así lo tengo actualmente:
(el array está relleno correctamente).


Código C++:
Ver original
  1. string conjunto::toString(){
  2.     int i;
  3.     string out;
  4.     for(i=0;i<MAX;i++)
  5.     {
  6.         if(this->get(i) == '\0') break;
  7.         //cout << this->get(i) << endl;
  8.         out += this->get(i);   
  9.         //out.append(" " + c.get(i));
  10.     }
  11.     return out;
  12. }
  13.  
  14.  
  15. ostream & operator << (std::ostream & stream, conjunto & c)
  16. {
  17.     stream  << " [" << c.toString() << "] ";
  18.     return stream;
  19. }

Pero la salida del programa me muestra sólo simbolos extraños y líneas dobles.

Sé que estoy haciendo algo mal en la concatenación, pero no doy con la tecla. A ver si alguien me ilumina un poco.
Saludos
  #2 (permalink)  
Antiguo 19/01/2012, 18:27
 
Fecha de Ingreso: agosto-2009
Mensajes: 16
Antigüedad: 14 años, 8 meses
Puntos: 2
Respuesta: Principiante : método toString()

la sobrecarga la tienes bien hecha, el problema probablemente lo tienes en ese vector o en lo que estas devolviendo con get()

podrias mostrar get() y la forma en la que estas inicializando el vector?

[edit]

perdon, no me habia fijado que habias dicho que era un vector de enteros.

lo que tu estas haciendo es out += get(i) lo que probablemente te devolvera el entero en ese indice.

el problema es que la clase string no admite enteros como parametro para el operador +=

lo que tendrias que hacer para poder formatear los enteros seria usar la clase stringstream que te lo formateara correctamente. te pongo un codigo que te he hecho de ejemplo

tendras que incluir, a parte, la libreria <sstream>

Código C++:
Ver original
  1. struct kt
  2. {
  3.     int x;
  4.     float _f;
  5. };
  6.  
  7. ostream &operator << (ostream &out, kt &t)
  8. {
  9.     string k = "";
  10.     out << t.x << ", " << t._f << endl;
  11.     return out;
  12. }
  13.  
  14. string toString(kt &tmp)
  15. {
  16.  
  17.     stringstream p;
  18.     p << tmp.x << ", " << tmp._f << " !!!!!!!!!!!" << endl;
  19.     return p.str();
  20. }
  21.  
  22.  
  23. int main()
  24. {
  25.  
  26.     kt k = { {13123}, {1.23123f}, } ;
  27.     cout << k << endl;
  28.     cout << toString(k) << endl;
  29.     cin.get();
  30.     return 0;
  31. }

Última edición por tig0; 19/01/2012 a las 18:38
  #3 (permalink)  
Antiguo 19/01/2012, 18:53
Avatar de SetheR  
Fecha de Ingreso: enero-2009
Mensajes: 265
Antigüedad: 15 años, 3 meses
Puntos: 44
Respuesta: Principiante : método toString()

Muchas gracias, una solución interesante y muy válida

Saludos
  #4 (permalink)  
Antiguo 19/01/2012, 21:40
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Principiante : método toString()

Y otra duda para que pienses un poco porque comparas un entero que devuelve get con un caracter. el caracter nulo '\n'?? En la linea 6 de tu codigo. SAludos

Etiquetas: clase, principiante, programa, string
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 13:13.