Polymorphismus



  • > templates generieren dir zur Laufzeit sogar die Funktion, die aufgerufen wird anhand des Typen, den du angibst.

    Echt? Ich dachte, dass der Objektcode mit dem jeweilig eingesetzten Typen zur Kompilier-Zeit erstellt wird?! 😮



  • wie kann ich den zusammenhang zwischen templates und statischer polymorphie erklären? templates werden ja immer zur compilezeit definiert!?

    das problem mit dynamischer polymorphie habe ich nun mit objekten beschrieben, wo ich die adresse für einen pointer der basisklasse übergebe. weil der compiler immer den typ des pointers nimmt (und nicht das objekt analysiert, welches sich hinter dem pointer befindet), um die funktion aufzurufen. Ist das so ok?

    cu



  • Ad aCTa schrieb:

    > templates generieren dir zur Laufzeit sogar die Funktion, die aufgerufen wird anhand des Typen, den du angibst.

    Echt? Ich dachte, dass der Objektcode mit dem jeweilig eingesetzten Typen zur Kompilier-Zeit erstellt wird?! 😮

    Hmpf. Natürlich meinte ich da zur Kompilierzeit und nicht zur Laufzeit.

    das problem mit dynamischer polymorphie habe ich nun mit objekten beschrieben, wo ich die adresse für einen pointer der basisklasse übergebe. weil der compiler immer den typ des pointers nimmt (und nicht das objekt analysiert, welches sich hinter dem pointer befindet), um die funktion aufzurufen. Ist das so ok?

    Der Compiler weiss bei dynamischer Polymorphie nicht von welchem Typ das Objekt sein wird, sondern der Typ wird dynamisch an den Zeiger gebunden. Der Compiler weiss lediglich, welche Typen an den Zeiger gebunden werden können. Der Tatsächliche Typ ist erst zur Laufzeit bekannt und kann auch erst dann ermittelt werden. Das geht ja noch weiter, dass von einer Zeile zur anderen der gebundene Typ sich ändern kann.



  • Das geht ja noch weiter, dass von einer Zeile zur anderen der gebundene Typ sich ändern kann.

    wie soll das denn gehn? hast ein bsp?

    cu



  • void bar (base** b)
    {
      *b = new A;
    }
    
    void foo ()
    {
     base* b = new B; // gebundener Typ B
     bar ( b ); // hier auch noch
     b->foobar (); // hier bereits Typ A
    }
    


  • jayz schrieb:

    wie soll das denn gehn? hast ein bsp?

    class Base {}; // sei Base polymorph
    class Derived : public Base {};
    
    int main()
    {
        Base b;
        Derived d;
    
        Base* p = &b;  // dynamischer Typ Base
        p = &d;        // dynamischer Typ Derived
    }
    


  • welche anwendungen hat dynamische polymorphie genau?

    cu



  • jayz schrieb:

    welche anwendungen hat dynamische polymorphie genau?

    Sie ist ein wichtiges Konzept zur Abstraktion in der objektorientierten Programmierung. Durch virtuelle Funktionen kann man Zeiger/Referenzen auf Instanzen einer Basisklasse besitzen, hinter denen sich aber auch abgeleitete Klassen befinden können. In der Basisklasse existiert eine gemeinsame Schnittstelle für Aufgaben, welche in abgeleiteten Klassen spezialisiert werden. Auf diese Weise kann man unterschiedliche Objekte einheitlich ansprechen, und je nach Klassenzugehörigkeit wird eine andere, auf das jeweilige Objekt angepasste, Aufgabe durchgeführt.



  • wo findet man das, in gui frameworks?



  • jayz schrieb:

    wo findet man das, in gui frameworks?

    Unter anderem. Aber Laufzeitpolymorphie ist ein Sprachkonzept und als solches nahezu überall anwendbar. Ich verwende es selber recht oft -- eben dort, wo die erwähnte Abstraktion benötigt wird.


Anmelden zum Antworten