[C con Clase] Pregunta sobre un ejemplo del curso de sobrecarga de operadores...

Steven Davidson steven en conclase.net
Mar Ene 16 23:42:26 CET 2007


Hola Sorcerer,

El pasado 2007-01-16 22:31:02, Sorcerer escribió:

S> Lo que no entiendo es el motivo por el cual hacen que la función
S> retorne algo, y en que afecta eso. Yo probé dejandola de esta forma:
S> void cadena::operator=(const cadena &c) {
S>    if(this != &c) {
S>       delete[] cad;
S>       if(c.cad) {
S>          cad = new char[strlen(c.cad) + 1];
S>          strcpy(cad, c.cad);
S>       }
S>       else cad = 0;
S>    }
S> }
S> Y me funciona bien...
S> Usé el mismo código de los ejemplos, el de la class cadena.

El motivo de retornar el objeto, o en este caso una referencia al objeto, es para encadenar varios operadores. Por ejemplo,

Cadena c1, c2, c3;
...
c1 = c2 = c3 = Cadena( "---" );

En tu caso, no podríamos hacer esto:
cadena c1, c2, c3;
...
c1 = c2 = c3 = cadena( "cad" );  // Error

La asignación a 'c3' sería correcta, pero no las posteriores. La solución sería separar las asignaciones sin posibilidad de encadenarlas. Esto es,

c3 = cadena( "cad" );  // Evalúa a: 'void'
c2 = c3;   // Evalúa a: 'void'
c1 = c2;   // Evalúa a: 'void'


Espero que haya aclarado la duda.

Steven


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