Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C++] Puntatori a funzione (e loro utilità)

    salve a tutti, mi son trovato davanti un esercizio, ecco il codice sorgente:

    codice:
    #include <iostream>
    #include <iomanip>
    
    
    using namespace std;
    
    
    int addizione (int a, int b) {return (a+b);}
    
    
    int sottrazione (int a, int b){return (a-b);}
    
    
    int Operazione(int x, int y, int (*FunzioneDaLanciare) (int,int))
    {
        int g;
        g=(*FunzioneDaLanciare) (x,y);
        return g;
    }
    
    
    int main()
    {
        int m,n;
        int (*meno) (int,int) = sottrazione;
    
    
        m= Operazione(2, 1, addizione);
    
    
        n= Operazione(10, m, meno);
        cout << n;
        return 0;
    }
    non riesco a capire la funzione operazione, cosa dovrebbe fare o meglio quello che mi manda in pappa è il puntatore funzione da lanciare, qualcuno riesce a spiegarmela?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Un puntatore a funzione contiene l'indirizzo della prima istruzione del codice relativo ad una funzione da eseguire. Non c'è molto da dire ... cosa non comprendi esattamente?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Hai ragione forse mi sono espresso male, non comprendo l'utilizzo di codice in piu, a quale scopo? io avrei svolto cosi l'esercizio:

    codice:
    #include <iostream>
    using namespace std;
    
    
    int addizione (int a, int b) {return (a+b);}
    
    
    int sottrazione (int a, int b){return (a-b);}
    
    
    int main()
    {
        int m,n;
        m= addizione(7, 5);
        cout << m << endl;
        n= sottrazione(20, m);
        cout << n;
        return 0;
    }

  4. #4
    Hai perfettamente ragione, in questo caso l'uso dei puntatori a funzione è assolutamente inutile; normalmente vengono usati in altri casi, ad esempio:
    - come callback; immagina ad esempio una libreria per effettuare connessioni HTTP; se vuoi gestire download grossi o in generale processare i dati man mano che arrivano un approccio comune è di fornire un callback, ovvero una funzione che viene richiamata di tanto in tanto passandole i dati che sono arrivati finora. Per specificare la funzione in questione si usano i puntatori a funzione;
    - un altro caso diffuso come callback è per toolkit grafici - ad ogni evento (click del mouse, mouse mosso, ...) può essere associata una funzione custom da richiamare; anche questo si può fare tramite puntatori a funzione (anche se in C++ spesso si sfrutta piuttosto l'ereditarietà e i metodi virtuali - che però alla fine sono puntatori sotto mentite spoglie);
    - per algoritmi generici, in cui una parte dell'algoritmo dev'essere fornita dall'esterno; un esempio classico è il sort, in cui il criterio di ordinamento non è fissato, ma può essere fornito dall'utilizzatore dell'algoritmo; è il caso della funzione di libreria C qsort, come pure di uno degli overload di std::sort (dove però viene accettato un generico functore, non è limitata all'uso di puntatori a funzione).
    Amaro C++, il gusto pieno dell'undefined behavior.

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.