Cursusinhoud
C++ OOP
C++ OOP
Introductie tot Polymorfisme
Polymorfisme is een fundamenteel concept. Afgeleid van het Grieks, wat "veelvormigheid" betekent, maakt het mogelijk dat objecten van verschillende classes
behandeld worden als een object van een gemeenschappelijke superklasse. Het belangrijkste aspect is het vermogen van verschillende entiteiten om op hun eigen manier te reageren op hetzelfde bericht of dezelfde methode-aanroep.
Typen polymorfisme
Er zijn twee hoofdtypen polymorfisme: compile-tijd (statisch) en runtime (dynamisch). Inzicht in hoe en wanneer elk type te gebruiken is essentieel voor het schrijven van flexibele, efficiënte code.
Compile-tijd polymorfisme: vindt plaats via functie- of operator-overloading, waarbij de uit te voeren methode tijdens het compileren wordt bepaald.
Runtime polymorfisme: maakt gebruik van virtuele functies, waardoor afgeleide klassen basisklasse-methoden kunnen overschrijven, waarbij de juiste methode tijdens de uitvoering wordt gekozen.
Toepassing en noodzaak van polymorfisme
Een uitstekende manier om polymorfisme te begrijpen is via een analogie uit de echte wereld. Denk aan een grafische gebruikersinterface met een knop. Deze knop kan zich verschillend gedragen afhankelijk van de context—het kan functioneren als een uploadknop, een resetknop of een annuleerknop.
Elke knop voert een specifieke actie uit wanneer erop wordt geklikt, maar ze functioneren allemaal in wezen als knoppen. Bekijk de theoretische implementatie van dit concept.
UploadButton.h
ResetButton.h
CancelButton.h
class UploadButton : public Button { public: void onClick() { std::cout << "Upload" << std::endl; } };
Aangezien alle knoppen dezelfde onClick()
-methode delen met verschillende implementaties, gaan we dieper in op dit onderwerp. Wat als we een functie nodig hebben die een object van een van de knop-classes
als parameter accepteert?
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(); }
Zoals je kunt zien kan het handmatig aanmaken van afzonderlijke functies voor elke knop complexiteit veroorzaken, vooral bij aanpassingen, omdat elke functie individueel moet worden aangepast als er problemen optreden. Ook zijn in de hoofdfunctie extra controles nodig om te bepalen welke functie moet worden aangeroepen. Polymorfisme biedt een eenvoudige oplossing voor deze problemen.
Bedankt voor je feedback!