Ver Mensaje Individual
  #3 (permalink)  
Antiguo 28/05/2013, 04:21
Avatar de Doommarine_Maxi
Doommarine_Maxi
 
Fecha de Ingreso: febrero-2011
Mensajes: 54
Antigüedad: 13 años, 10 meses
Puntos: 8
Respuesta: [Sobrecarga de operadores] Explicación de sobre código

Cita:
Iniciado por amchacon Ver Mensaje
Los comentarios los veo correctos. Aunque en un código profesional habría que poner la definición y implementación en archivos distintos (por cuestión de orden y mantener el encapsulamiento).

Los operadores + no son correctos porque estás creando nuevas clases sobre la marcha. Has perdido la referencia de la clase original, tienes que devolver la misma clase.

Yo lo haría directo:

Código C++:
Ver original
  1. Cadena Cadena::operator+(const char *C)
  2. {
  3.     if (!C)
  4.         return *this;
  5.    
  6.     delete [] cad; // Borramos la antigua cadena
  7.     cad = new char[strlen(C)+strlen(this->cad)+1]; // creamos una nueva
  8.     strcat(cad,C);
  9.  
  10.     return *this;
  11. }

Nota: No es necesario usar el puntero this para acceder al miembro cad de la clase.

Muchas gracias por tu comentario amchacon, me gustaría consultarte una ultima cosa.

Veras, recien estoy empezando a manejarme con punteros de una manera, digamos "más prolija". He visto que has usado la función new para reservar más espacio en la memoria dinámica para datos tipo char. La consulta aquí es que...

Al utilizar new, ¿Simplemente se reserva más espacio en la memoria sin afectar a los datos que hay en ella?, es decir, ¿Todos los datos que hay en "cad" siguen intactos con la diferencía que ahora tengo más espació en los arrays verdad?, ¿como un "realloc"?.

Otra cosa, delete [], lo que hace es eliminar la reserva de espació en la memoria y new genera nueva reserva de espació en la memoria dinamica... ¿Todo sin afectar a los datos que había en esos espacios de memoria verdad?.

Simplemente tengo esa duda al ver que usaste delete, luego new y luego concatenaste a cad

Última edición por Doommarine_Maxi; 28/05/2013 a las 04:22 Razón: Faltas de ortografía