Los punteros a funciones en c ++

Cuando una aplicación se está ejecutando, existen las funciones de la aplicación en la memoria- así como cualquier otra cosa en la memoria, tienen una dirección. Y tener una dirección que es bueno, porque de esa manera, las personas pueden encontrar.

Usted puede tomar la dirección de una función, tomando el nombre de ella y poner el Dirección de operador () Delante del nombre de la función, así:

address = MyFunction-

Pero para que esto funcione, es necesario saber qué tipo de declarar dirección. los dirección variable es un puntero a una función, y la manera más limpia para asignar un tipo es utilizar una typedef. (Afortunadamente, esta es una época en que la mayoría de las personas están dispuestas a utilizar un typedef.)

Aquí está la typedef, lo creas o no:

int typedef (* FunctionPtr) (int) -

Es difícil de seguir, pero el nombre del nuevo tipo es FunctionPtr. Esto define un tipo llamado FunctionPtr que devuelve un entero (el más a la izquierda int) Y toma un número entero como un parámetro (la más a la derecha int, que debe estar en paréntesis).

La parte central de esta afirmación es el nombre del nuevo tipo, y usted debe preceder por un asterisco, lo que significa que es un puntero a todo el resto de la expresión. Además, debe poner el nombre del tipo y su asterisco anterior entre paréntesis.

Y entonces usted está listo para declarar algunas variables! Aquí va:

Dirección FunctionPtr = MyFunction-

Esta línea declara dirección como un puntero a una función y la inicializa para MyFunction (). Ahora, para que esto funcione, el código de MyFunction () deben tener el mismo prototipo declarado en la typedef: En este caso, se debe tomar un entero como parámetro y devuelve un número entero.

Así, por ejemplo, puede tener una función como esta:

int TheSecretNumber (int x) {return x + 1}

Entonces usted podría tener un main () que almacena la dirección de esta función en una variable - y luego llama a la función utilizando la variable:

int main (int argc, char * argv []) {int typedef (* FunctionPtr) (int) dirección -INT MyPasscode = 20 FunctionPtr = TheSecretNumber-cout lt; lt; dirección (MyPasscode) lt; lt; endl-}

Ahora, sólo para que pueda decir que lo has visto, esto es lo que la dirección declaración parecería sin usando un typedef:

int (* dirección) (int) = TheSecretNumber-

El regalo debe ser que usted tiene dos cosas en paréntesis al lado del otro, y el conjunto de la derecha sólo tiene tipos interior. El de la izquierda tiene un nombre de variable. Así que esta línea no está declarando una de tipo más bien, se declara una variable.




» » » » Los punteros a funciones en c ++