Frage zur Polymorphie



  • Hab ein winziges Problem, ich programmiere seit Jahren in OOP und muss durch einige Umstände das ganze OOP Zeug nochmal Auswendiglernen, weil man muss es ja Wort für Wort können und nicht Jahrelang zielgerichtet einsetzen...

    Wie auch immer, das ganze ist in Englisch und bezüglich Polymorphie hab ich hier drei Dinge stehen, die ich beim besten willen nicht verstehe:

    Polymorphism allows you to treat derived class members
    just like their parent class's members.

    • Overriding Polymorphism: the ability of objects belonging to
      different data types to respond to method calls of methods
      of the same name, each one according to an appropriate
      type-specific behavior (works even with upcasting).
    • Overloading Polymorphism: use of an operator such as "+",
      to perform several different functions depending on the
      implementation. May be used to perform integer addition,
      float addition, list concatenation, or string concatenation.
    • Parametric Polymorphism, where code is written without
      mention of any specific type and thus can be used
      transparently with any number of new types.

    Kann mir das einer erklären? Ich krieg die Unterscheidung hier nicht wirklich in den Kopf. Das erste, handelt es sich um das Überschreiben der Methodenrümpfe mit neuer Funktionalität? Versehen mit virtuallen Markern, damit man die richtige Methode erwischt, wenn man eine abgeleitete Klasse in einem Basis-Klassendatentyp hat und eine Methode nutzen will?

    Wenn ja, steht das gleiche nicht bei Punkt 3? Dort ändert man die Implementierung + das ändern des Methodenkopfes bezüglich Parameter und Rückgabe?

    Und bezieht sich Punkt 2 nur auf das Überladen von Operatoren?

    Ich find diese Erklärung ist so unheimlich schlecht



  • Die Erklärung ist doch ok.

    1. Überschreiben von Methoden der Basisklasse in der abgeleiteten Klasse (wie du bereits gesagt hast)

    2. Parameterüberladung

    3. Generische Programmierung (Templates)



  • Punkt 3 verwirrt mich, weil wir dies in dem Zusammenhang noch nicht hatten.
    (Wir kauen gerade C++ durch 🙂 )



  • Beispiel für parametrische Polymorphie:

    template<typename T>
    T twice(T x) {
      return x + x;
    }
    


  • Wie gesagt, wir hatten noch keine Templates, daher meine Verwunderung, ich hab versucht Punkt 3 auf das uns bekannte Wissen anzuwenden...
    Das die damit generics (heißen die hier so 🙂 ? ) meinen, hätt ich nicht gedacht



  • Seikilos schrieb:

    Und bezieht sich Punkt 2 nur auf das Überladen von Operatoren?

    Nein, das bezieht sich auf alle Funktionen. Ist wohl einfach kein C++-spezifischer Text den du da aufgegabelt hast.



  • Ach, ja, jetzt wird mir es klar, ich hab versucht, das Wissen, was ich hab auf diese Bereiche zu verteilen, wenn ich nun aber weiß, dass 3. Generics sind, dann umschließt Punkt 2 jegliche Überladung...

    Das erste mal hat man es mir besser erklärt 🙂



  • Nein, das sind keine Generics, wenn du die verkrüppelten Möchtegern-Templates aus Java meinst. 😡



  • C# 🙂



  • Die Idee ist ähnlich, aber das ist nicht das selbe (wie in C#). Die Dinger heißen in C++ Templates und sind Segen und Fluch zugleich.


Anmelden zum Antworten