BUSCAR
INDICE
INDICE DEL TEMA
OBJETIVOS
TEORIA
PALABRAS RESERVADAS
GLOSARIO
EJERCICIOS
RESUELTOS
AUTOEVALUACION
PROPUESTOS
ERRORES
ESTADISTICAS
INICIO
FAQS
LINKS
RECOMIENDANOS
QUIENES SOMOS
MAPA DEL WEB
COLABORAR
Tema 23 El Puntero this
Teoría: Sobrecarga del operador de asignación =

Como indica el comentario que precede al uso anterior de this, normalmente no necesitamos el apuntador this. Sin embargo, en unas cuantas situaciones resulta útil.

Un lugar en el que suele utilizarse el apuntador this es en la sobrecarga del operador de asignación =. Por ejemplo, consideremos la siguiente clase:

class ClaseCadena {

public:

...

ClaseCadena& operador =(const CalseCadena& lado_derecho);

...

private:

char *a; //Arreglo dinámico para un valor de cadena

// que termina con '\0'.

};

Podemos utilizar la definición del operador de asignaión sobrecargado en cadenas de asignaciones como

s1 = s2 = s3;

La definición del operador de asignación sobrecargado utiliza el apuntador this para devolver el objeto que está a la izquierda del signo = (que es el objeto invocador):

// Esta versión no funciona en todos los casos. Vea también la siguiente versión

ClaseCadena& ClaseCadena::operador =(const ClaseCadena& lado_derecho) {

delete [] a;

a = new char[strlen(lado_derecho.a)+1];

strcpy(a, lado_derecho.a);

return * this;

}

La definición anterior tiene un problema en un caso: si el mismo objeto ocurre en ambos lados del operador de asignación (como en s = s;), el miembro del arreglo será eliminado. Para evitar este problema, podemos probar este caso especial con el apuntador this, como sigue:

// versión final con el error corregido

ClaseCadena& ClaseCadena::operador=(const ClaseCadena& lado_derecho){

if (this == &lado_derecho){

return * this;

}

else {

delete[] a;

a = new char[strlen(lado_derecho.a)+1];

strcpy(a, lado_derecho.a);

return *this;

}

}