[C con Clase] ¿que significa la sentencia .....return *this

Steven Davidson srd4121 en njit.edu
Lun Sep 20 06:19:59 CEST 2010


Hola Wolverine,

On 9/19/2010 9:56 PM, wolverine wrote:
>
> MEJOR dicho como funciona este puntero hasta ahora no entiendo por
> mas qe leo necesito una explicacion sencilla sin tanto embrollo como
> en los libros...
>
> por ejemplo mi profe hizo un programa con un operador sobrecargado
> que era asi...
>
> vector&  vector:: operator + (vector P){
> x=P.x + x
> y=P.y + y;
>
> return *this;
> }
>
> dice el profe que this es un puntero al objeto actual,.. pero como
> asi? no entiendo...
>

Puedes pensar que cada objeto que instancies (crees) tiene "escondido" 
un puntero a sí mismo como un dato miembro. Por ejemplo,

vector obj1(1,2), obj2(10,20);
...
vector obj3 = obj1 + obj2;

Los datos en 'obj3' son los mismos que en 'obj1'; es decir,

obj1 := x=11, y=22
obj2 := x=10, y=20
obj3 := x=11, y=22

Esto es porque el operador + retorna el objeto apuntado por "este 
objeto". En el ejemplo, "este objeto" es 'obj1', ya que obj1 + obj2 es 
equivalente a:

obj1.operator+( obj2 );

Al entrar en esta función miembro, automáticamente se hace esto:

this = &obj1;
vector P( obj2 );

y ejecutamos las sentencias:

this->x = P.x + this->x
this->y = P.y + this->y;

return *this;

> y lo otro que no entiendo es por que el tipo de valor retornado
> vector tiene al costado el signo "&" , no se supone que es un puntero
> a una funcion y deberia ser "vector * " ??...con un asterisco al
> costado en ves del asperson??
>

Ciertamente 'this' es un puntero, pero no estamos retornando 'this', 
sino la expresión: '*this'. Esto significa que estamos accediendo al 
objeto apuntado por 'this', que es de tipo 'vector'. Este operador 
miembro de 'vector' retorna una referencia a un 'vector'.


Espero que esto aclare la duda.

Steven





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