Kursinhalt
C++ OOP
C++ OOP
Einführung in die Polymorphie
Polymorphismus ist ein zentrales Konzept. Abgeleitet vom Griechischen und bedeutet „viele Formen“, ermöglicht es Objekten verschiedener classes
, als Objekt einer gemeinsamen Oberklasse behandelt zu werden. Der wichtigste Aspekt ist die Fähigkeit verschiedener Entitäten, auf dieselbe Nachricht oder Methodenaufruf jeweils unterschiedlich zu reagieren.
Arten von Polymorphismus
Es gibt zwei Hauptarten von Polymorphismus: Kompilierzeit- (statisch) und Laufzeit- (dynamisch) Polymorphismus. Das Verständnis, wie und wann jede Art verwendet wird, ist entscheidend für das Schreiben von flexiblem und effizientem Code.
Kompilierzeit-Polymorphismus: tritt durch Funktions- oder Operatorüberladung auf, wobei die auszuführende Methode zur Kompilierzeit bestimmt wird.
Laufzeit-Polymorphismus: verwendet virtuelle Funktionen, wodurch abgeleitete Klassen Methoden der Basisklasse überschreiben können, wobei die korrekte Methode zur Laufzeit ausgewählt wird.
Anwendung und Notwendigkeit von Polymorphismus
Ein anschauliches Beispiel für Polymorphismus bietet eine Analogie aus der realen Welt. Betrachten Sie eine grafische Benutzeroberfläche mit einem Button. Dieser Button kann je nach Kontext unterschiedlich agieren—er kann als Upload-Button, Reset-Button oder Abbrechen-Button fungieren.
Jede Schaltfläche führt beim Klicken eine unterschiedliche Aktion aus, aber alle dienen im Wesentlichen als Schaltflächen. Betrachten Sie die theoretische Implementierung dieses Konzepts.
UploadButton.h
ResetButton.h
CancelButton.h
class UploadButton : public Button { public: void onClick() { std::cout << "Upload" << std::endl; } };
Da alle Schaltflächen die gleiche Methode onClick()
mit unterschiedlichen Implementierungen besitzen, gehen wir näher darauf ein. Was ist, wenn wir eine Funktion benötigen, die ein Objekt akzeptiert, das zu einer der Schaltflächen-classes
als Parameter gehört?
main.cpp
void user_clicked_upload_button(const UploadButton& btn) { btn.onClick(); } void user_clicked_reset_button(const ResetButton& btn) { btn.onClick(); } void user_clicked_cancel_button(const CancelButton& btn) { btn.onClick(); }
Wie Sie sehen, kann das manuelle Erstellen separater Funktionen für jede Schaltfläche Komplexität erzeugen, insbesondere bei Änderungen, da jede Funktion einzeln angepasst werden muss, falls Probleme auftreten. Außerdem sind in der Hauptfunktion zusätzliche Überprüfungen erforderlich, um festzustellen, welche Funktion aufgerufen werden soll. Polymorphismus ermöglicht eine einfache Lösung dieser Probleme.
Danke für Ihr Feedback!