Kursinnehåll
C++ OOP
C++ OOP
Introduktion till Polymorfism
Polymorfism är ett centralt begrepp. Härstammande från grekiskan och betyder "många former", vilket möjliggör att objekt av olika classes
kan behandlas som ett objekt av en gemensam superklass. Den mest betydelsefulla aspekten är att olika enheter kan svara på sitt eget sätt på samma meddelande eller metodanrop.
Typer av polymorfism
Det finns två huvudsakliga typer av polymorfism: kompileringstid (statisk) och körtid (dynamisk). Att förstå hur och när varje typ används är avgörande för att skriva flexibel och effektiv kod.
Kompileringstidspolymorfism: sker genom funktions- eller operatoröverladdning, där vilken metod som ska köras bestäms vid kompilering.
Körtidspolymorfism: använder virtuella funktioner, vilket gör det möjligt för avledda klasser att överskrida basklassens metoder, där rätt metod väljs vid körtid.
Tillämpning och behov av polymorfism
Ett utmärkt sätt att förstå polymorfism är genom en verklig analogi. Tänk på ett grafiskt användargränssnitt med en knapp. Denna knapp kan bete sig olika beroende på sammanhanget—den kan fungera som en uppladdningsknapp, en återställningsknapp eller en avbrytknapp.
Varje knapp utför en distinkt åtgärd när den klickas på, men alla fungerar i grunden som knappar. Se den teoretiska implementeringen av detta koncept.
UploadButton.h
ResetButton.h
CancelButton.h
class UploadButton : public Button { public: void onClick() { std::cout << "Upload" << std::endl; } };
Eftersom alla knappar delar samma onClick()
-metod med olika implementationer, låt oss fördjupa oss ytterligare. Vad händer om vi behöver en funktion som tar emot ett objekt som tillhör en av knappens classes
som parameter?
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(); }
Som du kan se kan manuell skapande av separata funktioner för varje knapp skapa komplexitet, särskilt vid ändringar, eftersom varje funktion måste redigeras individuellt om problem uppstår. Dessutom kommer ytterligare kontroller att behövas i huvudfunktionen för att avgöra vilken funktion som ska anropas. Polymorfism möjliggör enkel lösning av dessa problem.
Tack för dina kommentarer!