1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

[C/C++] OOP & Function Pointer?

    • Frage
  • Marc_enaweg
  • 28. Januar 2004 um 20:03
  • Unerledigt
  • Marc_enaweg
    9
    Marc_enaweg
    Mitglied
    Reaktionen
    1
    Punkte
    771
    Beiträge
    147
    • 28. Januar 2004 um 20:03
    • #1

    In C sind Function-Pointer ja kein problem aber in C++ bring ich das nicht zustande.

    Hab 2 klassen die eine soll eine funktion in der anderen aufrufen und das über einen solchen pointer.

    ungefähr so hab ich mir das gedacht (funktioniert aber nicht):

    Code
    class TestKlasse1
    {
    public:
       TestKlasse1();
       ~TestKlasse1();
    
    
       void addFunction(void (*newEvent)(Object*)) { ...bla... }
    }
    
    
    classe TestKlasse2
    {
    public:
       TestKlasse2();
       ~TestKlasse2();
    
    
       void TestTestTest(Object* bla) { ...bla... }
    
    
       void run()
       {
           TestKlasse1* TestKlasse = new TestKlasse1();
           TestKlasse1->addFunction(TestTestTest);
       }
    }
    Alles anzeigen

    Ist es nicht möglich eine funktion aus einer anderen klasse zu verwenden?

    [Enaweg]

  • Kongo
    6
    Kongo
    Mitglied
    Punkte
    295
    Beiträge
    44
    • 28. Januar 2004 um 20:54
    • #2

    Funktionspointer gibts schon. Aber ich glaub nicht innerhalb von Klassen. Das kann ja nicht gehen, da es den Code für die Klassen eigentlich nur einmal irgendwo im Speicher gibt. Du müsstest wiederum das Objekt übergeben und über das kannst du dann auf die Funktion zugreifen.

    :thumb: Geschrieben nach der alten, neuen und zukünftigen Rechtschreibung! :thumb:

  • jjan
    6
    jjan
    Mitglied
    Reaktionen
    8
    Punkte
    293
    Beiträge
    57
    • 28. Januar 2004 um 23:40
    • #3

    Hi,

    Vielleicht hilft dir folgendes Beispiel weiter:

    Code
    #include <iostream>
    
    
    class B;
    
    
    typedef int (B::*funptr) (int);
    
    
    class A {
     private:
      funptr ptr;
     public:
      void addFunction(funptr p) {ptr=p;}
      void callFunction(B* obj, int a) {std::cout << (*obj.*ptr)(a) << std::endl;}
    };
    
    
    class B {
     public:
      int calcSquare(int a) {return a*a;}
    
    
      void run() {
        A* obj = new A;
        obj->addFunction(&B::calcSquare);
        obj->callFunction(this, 5);
      }
    };
    
    
    int main() {
      B* obj = new B;
      obj->run();
    }
    Alles anzeigen

    Prinzipiell gilt: Wenn du einen Pointer auf eine nicht-statische Member-Funktion hast, dann brauchst du auch eine Instanz eines Objekts der entsprechenden Klasse, auf der du die Funktion dann anwenden kannst.

    Alternativ dazu kannst du einen Pointer auf eine statische Funktion verwenden (wenn deine Funktion keinen Zugriff auf Instanz-Variablen benötigt).

    Eins Zwei Gras Bär Hund Vier Muh Macht Die Kuh

  • jjan
    6
    jjan
    Mitglied
    Reaktionen
    8
    Punkte
    293
    Beiträge
    57
    • 28. Januar 2004 um 23:45
    • #4
    Zitat von Kongo

    Funktionspointer gibts schon. Aber ich glaub nicht innerhalb von Klassen.

    Doch, und zwar gibt es zweierlei Varianten:
    a) Zeiger auf statische Member-Funktionen
    Die verhalten sich so ziemlich identisch zu den Funktionszeigern in C.
    b) Zeiger auf nicht-statische Member-Funktionen
    Dazu gleich mehr.

    Zitat


    Das kann ja nicht gehen, da es den Code für die Klassen eigentlich nur einmal irgendwo im Speicher gibt. Du müsstest wiederum das Objekt übergeben und über das kannst du dann auf die Funktion zugreifen.

    Du sagst es geht nicht, bringst dann aber einen Vorschlag, wie es doch geht. Und genau so ist es auch im Standard vorgesehen :)

    Logischerweise brauchst Du natürlich dann für den Aufruf eines Zeigers auf eine nicht-statische Member-Funktion eine Instanz eines Objekts der entsprechenden Klasse, für die die Funktion dann ausgeführt wird.

    Eins Zwei Gras Bär Hund Vier Muh Macht Die Kuh

  • Marc_enaweg
    9
    Marc_enaweg
    Mitglied
    Reaktionen
    1
    Punkte
    771
    Beiträge
    147
    • 29. Januar 2004 um 00:21
    • #5

    Kongo: thx :winking_face:

    PliniusSecundus: thx für die detaillierte antwort. ist genau das was ich gesucht hab, probier ich gleich mal aus :thumb:

    [Enaweg]

  • Maximilian Rupp 27. Dezember 2024 um 12:08

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung