Kursinhalt
C++ OOP
C++ OOP
Einführung in Polymorphismus
Arten von Polymorphismus
Es gibt zwei Hauptarten von Polymorphismus: Kompilierungszeit (statisch) und Laufzeit (dynamisch). Das Verständnis der Nuancen und Anwendungen jeder Art von Polymorphismus ist entscheidend für das Schreiben robuster und anpassungsfähiger Code.
- Kompilierungszeit-Polymorphismus: Dies wird durch Funktionsüberladung und Operatorüberladung erreicht, wobei die auszuführende Funktion während der Kompilierung bestimmt wird.
- Laufzeit-Polymorphismus: Dies wird hauptsächlich durch die Verwendung von virtuellen Funktionen erreicht, die es ermöglichen, eine Funktion in abgeleiteten Klassen zu überschreiben und ihr Verhalten zur Laufzeit zu bestimmen.
Hinweis
In diesem Kurs werden wir tief in den Laufzeit-Polymorphismus eintauchen, da er eines der grundlegenden Paradigmen der objektorientierten Programmierung darstellt. Zusätzlich werden wir den Kompilierungszeit-Polymorphismus im Kontext von Klassen ansprechen.
Anwendung und Notwendigkeit von Polymorphismus
Ein hervorragender Weg, Polymorphismus zu verstehen, ist durch eine Analogie aus der realen Welt. Betrachten Sie eine grafische Benutzeroberfläche mit einem Button. Dieser Button kann in verschiedenen Kontexten verwendet werden: als Upload-Button, Reset-Button oder Abbrechen-Button.
Jeder Knopf führt eine unterschiedliche Aktion aus, wenn er angeklickt wird, aber alle dienen im Wesentlichen als Knöpfe. Schauen Sie sich die theoretische Implementierung dieses Konzepts an.
UploadButton
ResetButton
CancelButton
class UploadButton : public Button { public: void onClick() { std::cout << "Upload" << std::endl; } };
Da alle Schaltflächen die gleiche onClick()-Methode mit unterschiedlichen Implementierungen teilen, lassen Sie uns tiefer eintauchen. Was, wenn wir eine Funktion benötigen, die ein Objekt, das zu einer der SchaltflächenKlassen gehört, als Parameter akzeptiert?
main
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 können, kann das manuelle Erstellen separater Funktionen für jede Schaltfläche Komplexität erzeugen, insbesondere bei Änderungen, da jede Funktion individuell bearbeitet werden muss, wenn Probleme auftreten. Außerdem sind in der Hauptfunktion zusätzliche Überprüfungen erforderlich, um zu bestimmen, welche Funktion aufgerufen werden soll. Polymorphismus ermöglicht eine einfache Lösung dieser Probleme.
Danke für Ihr Feedback!