Introduction to Polymorphie
Swipe um das Menü anzuzeigen
Polymorphismus ist ein zentrales Konzept. Abgeleitet vom Griechischen für "viele Formen" ermöglicht es, Objekte verschiedener classes als Objekt einer gemeinsamen Oberklasse zu behandeln. Der wichtigste Aspekt ist die Fähigkeit verschiedener Entitäten, auf dieselbe Nachricht oder Methodenaufruf auf ihre eigene Weise 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, 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 hervorragendes Beispiel zum Verständnis von Polymorphismus ist eine Analogie aus der realen Welt. Betrachten Sie eine grafische Benutzeroberfläche mit einem Button. Dieser Button kann sich je nach Kontext unterschiedlich verhalten – er kann als Upload-Button, Reset-Button oder Abbrechen-Button fungieren.
Jede Schaltfläche führt beim Klicken eine unterschiedliche Aktion aus, aber im Wesentlichen dienen sie alle als Schaltflächen. Betrachte die theoretische Umsetzung dieses Konzepts.
UploadButton.h
ResetButton.h
CancelButton.h
1234class 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 einen Schritt weiter. Was ist, wenn wir eine Funktion benötigen, die ein Objekt einer der Schaltflächen-classes als Parameter akzeptiert?
main.cpp
1234567891011void 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 bearbeitet werden muss, wenn 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!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen