[C con Clase] constructor de copia

Steven Davidson steven en conclase.net
Vie Jun 15 06:46:05 CEST 2007


Hola Rodolfo,

El pasado 2007-06-15 03:57:35, rodolfo escribió:

r> Hola a todos.-
r> Tengo una pregunta para Ustedes, abusando de su cortesía;  leo siempre los 
r> correos para ver si puedo contestar alguno y asi poder de alguna manera 
r> empezar a devolver los favores que recibo, pero hasta ahora no he podido 
r> encontrar a nadie que sea mas ignorante que yo, ja, ja.  Espero que esto no 
r> sea por mucho tiempo.  Bueno, ahi va mi pregunta :
r> tengo una clase "Codigo", y una funcion miembro que sobrecarga el operador 
r> ++
r> Codigo Codigo::operator++( )
r> {
r>         Codigo Temp = *this;      // copia temporal del objeto actual
r>        // instrucciones que incrementan al objeto actual
r>         return Temp;   // regreso una copia del objeto Temp de tipo Codigo
r> }

Creo que quieres implementar el operador post-incremento. Para esto, el operador tiene que aceptar un parámetro de tipo 'int'. Esto es,

// Post-Incremento
Codigo Codigo::operator++( int i )
{
...
}

Para el operador pre-incremento, sugiero retornar una referencia a 'Codigo'. Por ejemplo,

// Pre-Incremento
Codigo & Codigo::operator++()
{
  ...
  return *this;
}

De esta manera, podemos "encadenar" varias operaciones al mismo objeto. Por ejemplo,

Codigo obj;
...
(++obj).asignar( 10 );
obj.mostrar();

r> Pregunta:  ¿ Tengo necesariamente que crear un constructor de copia para 
r> poder retornar el Temp, o el c++ crea por si solo ese constructor de copia ? 
r>    ¿ o lo que es peor, a lo mejor no hay nada que copiar, y yo me estoy 
r> imaginando cosas ? ¿ será ?. Ojalá se me entienda.

Esto depende de lo que tienes o quieres copiar. Si tienes punteros como datos miembros y requieres hacer una copia profunda, entonces sí tendrás que implementar tu propio constructor copia. Si no, entonces C++ ya crea un constructor copia por defecto, el cual simplemente copia la información tal y como está en el objeto: miembro a miembro.

Sin conocer más acerca de la clase 'Codigo', no te puedo decir si sí o si no. En general, procura crear tu propio constructor copia, para despejar cualesquier dudas.


Espero haber aclarado el tema.

Steven


Más información sobre la lista de distribución Cconclase