[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