[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