next up previous contents
Next: Funções Up: Apontadores Previous: Alocação Dinâmica   Sumário

Apontadores para funções

Apontadores para funções funcionam da mesma forma que em C. Este conceito não é um dos mais utilizados em C, mas é importante em C ++ para entender mais adiante os conceitos de ligação dinâmica e polimorfismo. Por este motivo, uma breve revisão é apresentada aqui na forma do seguinte exemplo.

indentation

#include $<$stdio.h$>$

void print_stuff(float data_to_ignore);
void print_message(float list_this_data);
void print_float(float data_to_print);
void ($\ast$function_pointer)(float);

main()
{
float pi = 3.14159;
float two_pi = 2.0 $\ast$ pi;

print_stuff(pi);
function_pointer = print_stuff;
function_pointer(pi);
function_pointer = print_message;
function_pointer(two_pi);
function_pointer(13.0);
function_pointer = print_float;
function_pointer(pi);
print_float(pi);
}


void print_stuff(float data_to_ignore)
{
printf("This is the print stuff function.$\backslash$n");
}


void print_message(float list_this_data)
{
printf("The data to be listed is %f$\backslash$n", list_this_data);
}


void print_float(float data_to_print)
{
printf("The data to be printed is %f$\backslash$n", data_to_print);
}
Neste exemplo, function_pointer é um apontador para uma função que não retorna nada (tipo de retorno void) e requer um único parâmetro formal, uma variável do tipo float. As três funções declaradas neste exemplo se encaixam neste padrão, sendo portanto ``candidatas'' a serem apontadas por function_pointer.

É interessante notar neste exemplo que o nome de uma função pode ser atribuído diretamente a um apontador para uma função. Isto sugere, de forma correta, que o nome de uma função é na verdade um apontador para aquela função -- apenas este apontador é constante, e portanto não pode ser alterado. Deste modo, após atribuir um valor para um apontador de função, o nome do apontador também pode ser usado para chamar a função.


next up previous contents
Next: Funções Up: Apontadores Previous: Alocação Dinâmica   Sumário
Ivan Luiz Marques Ricarte 2001-06-01