Zeiger auf Funktionen



  • Kennt jemand ein sinnvolles Beispiel für Zeiger auf Funktionen. Am besten mit Code. Ich seh da irgendwie keine sinvolle Anwendungsmöglichkeit

    [ 04.07.2001: Beitrag editiert von: class CMarcus ]



  • Hallo,
    stell dir vor, du hast ein Testprogramm in dem du die einzelnen Tests in Funktionen (mit gleicher Signatur) unterteilt hast. Jetzt möchtest du alle Funktionen hintereinander aufrufen. Dann kannst du entweder alle Funktionen explizit oder aber bequem mit einer Schleife alle Funktionen über ein Array welches Funktionszeiger enthält aufrufen.

    Dies ist nur eins von vielen möglichen Beispielen.

    Gruß



  • Hi,
    hier ein kleines Codebeispiel:

    #include <iostream>
    using namespace std;
    
    double add(double x, double y) { return x + y  ;)
    double sub(double x, double y) { return x - y  ;)
    double mul(double x, double y) { return x * y  ;)
    double div(double x, double y) { return x / y  ;)
    
    char op[] = {'+', '-', '*', '/'};
    typedef double (*fun) (double, double);
    fun Fun[] = {add, sub, mul, div};
    
    int main()
    {
     double x, y;
     char c;
          cin >> c >> x >> y; //Eingabe
     for(int i = 0; i < 4; ++i)
      {
         if( op[i] == c ) //ist eingegebenes Zeichen =  Zeichen im Array op[] dann wird..
          {
             cout << fun[i](x, y); //..die entsprechende Funktion ausgeführt
          }
         cout << endl;
      }
     return 0;
    }
    

    Ich hoffe das war verständlich.

    mfg
    V_R

    [ 07.07.2001: Beitrag editiert von: class CMarcus ]

    [ Dieser Beitrag wurde am 03.11.2002 um 20:04 Uhr von Dimah editiert. ]



  • Hi,

    ein Sinnvolles Beispiel findest du so gut wie in jeder GUI-API: Jede mir bekannte GUI funktioniert so, das sie dich bei bestimmten Aktionen (Button angeklickt, Taste gedrückt, Fenster verschoben, etc) benachrichtigt, und zwar indem das API eine Funktion deines Programmes aufruft. Um dem API zu sagen, welche Funktion aufgerufen soll, musst du ihm natürlich einen Zeiger dieser Funktion übergeben.

    Ein weiteres Beispiel ist das dynamische Laden von Funktionen einer DLL, noch interessanter für Plugin-DLL's, wenn dein Programm also gar nicht weiss, was die DLL eigentlich genau macht.

    Ein weiteres Beispiel ist die MFC. Auch dort werden die Events über Zeiger auf Funktionen realisiert, in diesem Falle Member-Funktionen, gut versteckt durch Makros. Das ist in meinen Augen aber ein extrem kranker Ansatz, für den ich persönlich mich in einem objektorientierten Programm in Grund und Boden schämen würde.

    Tschau
    Frank



  • Nun, zum Teil sind Zeiger auf Funktionen eine Altlast von C. Wenn man unter C++ streng objektorientiert arbeitet, kann man das zu 95% vollständig durch virtuelle Funktionen ersetzen.

    Aber immer dort, wo man Schnittstellen zum System bedienen muß (Stichwort: Callbacks), ist das weiterhin notwendig.

    ------------------
    Viele Grüße

    Marc++us

    Besucht die C/C++-Ecke
    http://www.c-plusplus.net



  • Hallo,
    ...und zusätzlich kann man in der OOP auch noch Funktionsobjekte benutzen (siehe STL Algorithmen)

    Gruß


Anmelden zum Antworten