Ver Mensaje Individual
  #4 (permalink)  
Antiguo 03/02/2014, 14:21
CalgaryCorpus
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 11 meses
Puntos: 61
Respuesta: Usar un método que tiene otro método como argumento

Una explicación mas extensa y árida.

En C es "fácil" manipular direcciones de memoria al interior de punteros.
Guardas las dirección de memoria, luego la usas, desreferenciando el puntero.

La definicion de las funciones queda en alguna dirección de memoria. Esta direccion es guardada en un puntero constante. Este puntero constante es el nombre de la funcion. Por el solo hecho de definir una funcion, el cargador del ejecutable, gratis, realiza esta asignacion para ti. Por ejemplo, para la definición

Código C:
Ver original
  1. void f() {}

f es un puntero constante, que guarda la dirección de memoria donde la función está y es entonces posible pasar f sin parentesis a una funcion que espera recibir un puntero a una funcion.

En el caso de métodos en C++ (o si quieres tomarlo asi, "funciones" al interior de una clase), ellos cumplen casi lo mismo.
Los nombres guardan direcciones de memoria, pero en realidad solo guardan un desplazamiento tomado desde el comienzo del objeto.

Si un objeto de una clase tiene un método dentro, este método (la dirección de memoria), está en la dirección del objeto + el desplazamiento del método.

Otro objeto de la misma clase compartirá con el anterior objeto el desplazamiento del método, pero no compartirá la dirección de comienzo del objeto. Para este 2do objeto, la dirección del método sera la dirección del objeto 2 + el mismo desplazamiento.

Entonces, cuando se trata de que una función o método reciba un método de otra clase, no es suficiente recibir la "dirección de memoria", pues solo estás recibiendo el desplazamiento, necesitas un objeto para poder calcular la dirección definitiva.

Si el método es static, estos se comportan igual que las funciones globales, pues su definición es solo 1 para todos los objetos de la misma clase.

La sintaxis de los punteros a métodos (que guardan ese desplazamiento) es un poco mas complicada, pero revísala solo si la necesitas. Si te sirve la definición de las funciones globales, quédate con esa.
__________________
Visita mi perfil en LinkedIn

Última edición por CalgaryCorpus; 03/02/2014 a las 14:28