Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Don Pollo en 21 Marzo 2011, 19:07 pm



Título: Duda con el "&" en la declaración de funciones [C++]
Publicado por: 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


Título: Re: Duda con el "&" en la declaración de funciones [C++]
Publicado por: Samael.Black en 21 Marzo 2011, 19:11 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...


Título: Re: Duda con el "&" en la declaración de funciones [C++]
Publicado por: Don Pollo en 21 Marzo 2011, 19:13 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.


Título: Re: Duda con el "&" en la declaración de funciones [C++]
Publicado por: Akai en 21 Marzo 2011, 19:51 pm
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
  1. void incrementar (int & valor){
  2. valor++;
  3. }

si hacemos:
Código
  1. int n=4;
  2. incrementar(n);
  3.  
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
  1. int i,j,k;
  2. 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
  1. distancia& operator=(const distancia &assign){
  2. dist=assign.dist;
  3. desti=assign.desti;
  4. return *this;
  5. };
y esto, es lo que me permite encadenar asignaciones para mi clase "distancia"


Título: Re: Duda con el "&" en la declaración de funciones [C++]
Publicado por: Don Pollo en 21 Marzo 2011, 21:27 pm
Creo que lo he entendido. Entonces, cuando la función devuelva una referencia, tengo que retornar con el *this??


Título: Re: Duda con el "&" en la declaración de funciones [C++]
Publicado por: Akai en 21 Marzo 2011, 21:43 pm
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.