Duda con el "&" en la declaración de funciones [C++]

Iniciado por Don Pollo, 21 Marzo 2011, 19:07 PM

0 Miembros y 1 Visitante están viendo este tema.

Don Pollo

Veréis, tengo una duda que me reconcome por dentro y es que no comprendo cuando se pone el "&" delante del nombre de las funciones y cuando se pone al lado de los parámetros.

Algún alma caritativa que me lo explique?

Gracias de antemano!  ;D

Samael.Black

Cita de: Don Pollo en 21 Marzo 2011, 19:07 PM
Veréis, tengo una duda que me reconcome por dentro y es que no comprendo cuando se pone el "&" delante del nombre de las funciones y cuando se pone al lado de los parámetros.

Algún alma caritativa que me lo explique?

Gracias de antemano!  ;D
Cuando se usa con los parametros estas haciendo una referencia... pero cuando se usa delante del nombre de una funcion nose si sea lo mismo...

Don Pollo

Cita de: Samael.Black en 21 Marzo 2011, 19:11 PM
Cuando se usa con los parametros estas haciendo una referencia... pero cuando se usa delante del nombre de una funcion nose si sea lo mismo...

Sí, de las dos formas es por referencia, pero la cosa es que no sé cuando usar una u otra.

Akai

cuando lo usas en los parámetros, especificas que dicha variable se pasará por REFERENCIA en vez de hacerse una copia de la misma y por tanto, podrá ser modificada en la función.

Código (cpp) [Seleccionar]

void incrementar (int & valor){
valor++;
}


si hacemos:
Código (cpp) [Seleccionar]

int n=4;
incrementar(n);

n ahora vale 5. En cambio, sin el & en el parámetro de la funcion, n no se modificaría fuera del rango de la misma, sino que se modificaría una copia de n, destruída al terminar la funcion.

Cuando va delante del nombre de una función, es que la función devuelve una referencia. Se utiliza sobretodo para encadenar operadores, ejemplo:
Código (cpp) [Seleccionar]
int i,j,k;
k=j=i=1;

Esto lo puedes hacer, porque el operador = devuelve una referencia a si mismo, de forma que consigues el valor de 1 en base a la i para j, y el valor de 1 en k por el valor de j (que a su vez, como ya he dicho, se consigue con la referencia de 1 por la i).

Sobretodo se utiliza para sobrecargar operadores de clases, te pongo un ejemplo:
Código (cpp) [Seleccionar]
distancia& operator=(const distancia &assign){
dist=assign.dist;
desti=assign.desti;
return *this;
};

y esto, es lo que me permite encadenar asignaciones para mi clase "distancia"

Don Pollo

Creo que lo he entendido. Entonces, cuando la función devuelva una referencia, tengo que retornar con el *this??

Akai

Si quieres que esa referencia sea al objeto que la devuelve si. this es la palabra reservada que se refiere al objeto que la usa. En el ejemplo que yo he puesto, uso this para devolver la referencia al objeto al cual acabo de asignar.