Comprensione puntatori a funzione

di il
8 risposte

Comprensione puntatori a funzione

Ho questo codice:

#include <iostream>
#include <stdlib.h>
using namespace std;


bool minoreAlfabetico(string s1, string s2)
{
    return s1<s2;
}

bool minoreLunghezza(string s1, string s2)
{
    return s1.length() < s2.length();
}

bool minoreValore(string s1, string s2)
{
    return stoi(s1) < stoi(s2);
}

void ordinamentoGenerico(string v[], int n_ele, bool (*fminore_di)(string,string))
{
    for(int i=0;i<n_ele-1;i++)
        for(int j=i+1;j<n_ele;j++)
          if(fminore_di(v[j],v[i]))
          swap(v[i],v[j]);
}

void stampaVet(string v[], int n_ele)
{
    for(int i=0; i<n_ele; i++)
        cout<<v[i]<<" ";
    cout<<endl;
}


int main()
{
    string v1[] {"caso","casalasco","abate","birillo"};
    ordinamentoGenerico(v1,4,minoreAlfabetico);
    stampaVet(v1,4);

    string v2[] {"caso","casalacco","abate","birillo"};
    ordinamentoGenerico(v2,4,minoreLunghezza);
    stampaVet(v2,4);

    string v3[] {"100","67","2","123"};
    ordinamentoGenerico(v3,4,minoreValore);
    stampaVet(v3,4);

Ho capito come funziona il meccanismo ma non capisco cosa combina quel bool(*fminore_di)(string, string)
Si tratta si di un puntatore a funzione ma non capisco come funziona in questo caso.Potreste aiutarmi a capire per favore?

P.S. : Perchè nella maggior parte dei libri non viene trattato l'argomento dei puntatori a puntatori?

8 Risposte

  • Re: Comprensione puntatori a funzione

    Quella è la firma per un puntatore a funzione che restituisce un bool e accetta due string come parametro.
    Quindi, quando chiami la ordinamentoGenerico, l'ultimo parametro che si aspetta sarà un puntatore a funzione fatto secondo la firma.

    In tutti i libri "seri" i puntatori a funzione sono trattati.

    Ma parliamo ancora di C ... non stavi studiando il C++ ?
  • Re: Comprensione puntatori a funzione

    No,no questo è c++, grazie mille per il chiarimento,ma per libri seri quali intendi?
  • Re: Comprensione puntatori a funzione

    Guarda che i puntatori a funzione esistono anche in C ... dovresti averli studiati ... il C++ non c'entra...

    I libri seri sono quelli che trattano tutte le caratteristiche del linguaggio, anche i puntatori a funzione, ad esempio...
  • Re: Comprensione puntatori a funzione

    I libri seri, se parliamo di C++, sono questi.
  • Re: Comprensione puntatori a funzione

    Ok, potrei avere un altro chiarimento? Come fà l'istruzione s1<s2 a confrontare in ordine alfabetico le due stringhe senza avrglielo specificato?
  • Re: Comprensione puntatori a funzione

    Perché stai lavorando su classi string e l'operatore < viene ridefinito dalla classe per fare i confronti in modo corretto. Se non studi il c++ argomento dopo argomento, non ci capisci nulla.
  • Re: Comprensione puntatori a funzione

    Ah ok ho capito,praticamente viene create una nuova funzionalità virtuale per quell'operatore e in quel caso fà il confronto, ho sentito parlare di overloading degli operatori, l'ho sospettato in questo caso ma non ne ero sicuro e l'ho chiesto.Il fatto è che string lo uso in vari progetti e anche se non ho ancora studiato OOP certe cose le devo capire, quindi qulche saltello lo devo fareogni tanto.Comunque grazie mille per i chiarimenti, vedo che nella link proposto da MAW 1968 non compare il libro di deitel, a quanto pare non è veramnte serio come lo fanno credere alcuni, passerò direttamente al testo di Stroustrup, sperando che tratti gli argomenti in maniera approfondita e chiara.
  • Re: Comprensione puntatori a funzione

    olegfresi ha scritto:


    ...di Stroustrup, sperando che tratti gli argomenti in maniera approfondita e chiara.
    Beh ... non so se ti sarà chiaro ma meglio di lui...
Devi accedere o registrarti per scrivere nel forum
8 risposte