// ****************************************** // PROGRAMACAO DE SOFTWARE BASICO // // Assunto: Ponteiros para funções // // Autor: Marcio Serolli Pinho // pinho@inf.pucrs.br // ****************************************** #include using namespace std; //using std::cout; //using std::endl; // -------------------------------------------- // Definição dos tipos a serem usados // para criar ponteiros para funções typedef int FunctionPointerINT(int a); typedef void FunctionPointerINT_FLOAT(int a, float b); // Exemplo de função a ser "apontada" int Imprime(int n) { cout << "Funcao que imprime...." << endl; } // Exemplo de função a ser "apontada" int NaoImprime(int n) { cout << "Funcao que NÃO imprime...." << endl; } // Exemplo de função a ser "apontada" void Teste_Com_INT_e_FLOAT(int x, float y) { cout << "Funcao que Testa INT e FLOAT. X = " << x << " Y = " << y << endl; } // Função que faz um ponteiro apontar para uma função recebida como parâmetro void SetaFuncaoINT_FLOAT(FunctionPointerINT_FLOAT* &PTR_f, FunctionPointerINT_FLOAT* funcao){ PTR_f = funcao; } int main() { // dois ponteiros para funções FunctionPointerINT *PtrFuncaoINT; FunctionPointerINT_FLOAT *PtrFuncaoINT_FLOAT; // faz o ponteiro para pontar para a função "Imprime" PtrFuncaoINT = Imprime; // chamada da função, passado 10 como parâmetro (*PtrFuncaoINT) (10); // faz o ponteiro para pontar para a função "Imprime" PtrFuncaoINT = NaoImprime; // chamada da função, passado 10 como parâmetro (*PtrFuncaoINT) (10); // faz o ponteiro para pontar para a função "Teste_Com_INT_e_FLOAT" SetaFuncaoINT_FLOAT(PtrFuncaoINT_FLOAT, Teste_Com_INT_e_FLOAT); //PtrFuncaoINT_FLOAT = Teste_Com_INT_e_FLOAT; // chamada da função, passado 11 e 12.23 como parâmetros (*PtrFuncaoINT_FLOAT) (11, 12.23); system("pause"); }