[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