Ersetzen Templates Polymorphie?



  • Vorlage schrieb:

    Wie nennt man das was ich geschrieben habe?

    Overloading. Und die Beschreibung aus dieser Präsentation ist dafür korrekt. Nur dieser kleine Kommentar "Polymorphie" nicht.



  • In der Präsentation steht auch:

    Polymorphie
    (=Vielgestaltigkeit)
    bezeichent man auch als Überladen von Funktionen

    😕 versteh ich da was falsch oder hat der Lehrer selber keine Ahnung was er da macht? ...

    Ich glaub ich les gleich mal im C++ Primer nach irgendwie gefällt mir die Präsentation nicht.



  • Vorlage schrieb:

    Polymorphie
    (=Vielgestaltigkeit)
    bezeichent man auch als Überladen von Funktionen

    ähm... nein.

    Polymorphie ist:

    class Form
    {
      public:
        virtual Print()=0;
    };
    
    class Kreis : public Form
    {
      public:
        void Print() {...};
    };
    
    class Rechteck : public Form
    {
      public:
        void Print() {...};
    };
    
    std::vector<Form*> formen;
    formen.push_back(new Kreis());
    formen.push_back(new Rechteck());
    
    for_each(Form* form : formen)
      form->Print();
    

    Dabei wird dann "wie von Zauberhand" die richtige Print()-Methode aufgerufen.

    Disclaimer: nur ein schnell zusammengetipptes Beispiel. Natürlich sollte man new niemals so benutzen, sondern die Instanzen in einem Smartpointer halten.

    edit: gerade folgende "Definition" gefunden:

    Bei Poymorphie haben die Methoden die gleiche Signatur, sind jedoch in verschiedenen Klassen implementiert. Zur Laufzeit wird anhand des Objekttyps entschieden, welche Methode gerufen wird.

    Überladen besagt, dass die Methoden den gleichen Namen, aber veschiedene Parameter haben.



  • Danke für das Beispiel.

    Jetzt werde ich erst mal diese dämliche Präsentation löschen!
    Das ärger mich jetzt schon wieder das man was lernt was falsch ist. 😡



  • Vorlage schrieb:

    😕 versteh ich da was falsch oder hat der Lehrer selber keine Ahnung was er da macht? ...

    Bei solchen Fragen antworte ich immer gerne: Was hälst du für wahrscheinlicher? Traurigerweise macht die Frage auch hier Sinn. Ich bin nur froh aus dem Verein raus zu sein. So peinlich war mein Lehrer dann aber doch nicht.



  • In C++ versteht man unter Polymorphismus eigentlich nur Inklusionspolymorphismus, d.h. virtuelle Funktionen. Templates sind eigentlich parametrischer Polymorphismus, nur nennt das in C++ kaum jemand so. Überladen ist bei manchen Autoren auch eine Form von Polymorphismus.

    Aber die Präsentation stellt es ja so dar, als sei Überladen dasselbe wie Polymorphismus. Das ist natürlich kompletter Unsinn.



  • Vorlage schrieb:

    Kann es sein das Templates Polymorphie nutzlos machen?

    Wenn du mit Polymorphie, polymorphe Klassen mit ihren virtuellen Funktionen meinst: Nö. Die Dinger sind eigentlich orthogonal zueinander.

    @Bashar: "Polymorphismus" oder "Polymorphie"? 😉



  • krümelkacker schrieb:

    @Bashar: "Polymorphismus" oder "Polymorphie"? 😉

    Öhm. 🙂 Wenn das einen Unterschied macht, bitte erklären.



  • Bashar schrieb:

    Öhm. 🙂 Wenn das einen Unterschied macht, bitte erklären.

    Der Begriff "Polymorphismus" wird eigentlich nur in der Genetik benutzt -> Sequenzvariation.

    In der Programmierung benutzt man Polymorphie für vieles, z.B. auch die Überladung von Operatoren und Funktionen usw. Allerdings wird in C++ Polymorphie für Polymorphie im objektorientierten Sinne genommen, also nicht für Funktionsüberladungen. Ob man unter Polymorphie jetzt nur die Laufzeitpolymorphie (ableiten + virtuelle Funktionen & Co.) oder auch die Compilezeitpolymorphie (über Templates) versteht, ist unterschiedlich. Meistens wird Compilezeitpolymorphie aber explizit so genannt. "parametrische Polymorphie" wird sowas eher selten genannt (wenn überhaupt)



  • pumuckl schrieb:

    Der Begriff "Polymorphismus" wird eigentlich nur in der Genetik benutzt -> Sequenzvariation.

    Oder wenn man wie ich englische Begriffe 1:1 ins Deutsche überträgt. Der Angelsachse sagt zu Polymorphie polymorphism.

    Allerdings wird in C++ [...] "parametrische Polymorphie" wird sowas eher selten genannt (wenn überhaupt)

    Das hab ich doch gesagt.


Anmelden zum Antworten