Kursusindhold
C++ OOP
C++ OOP
Introduktion til Polymorfi
Polymorfi er et centralt begreb. Ordet stammer fra græsk og betyder "mange former"; det gør det muligt for objekter fra forskellige classes
at blive behandlet som et objekt af en fælles superklasse. Det mest væsentlige aspekt er, at forskellige enheder kan reagere på deres egen måde på den samme besked eller metodekald.
Typer af polymorfi
Der findes to hovedtyper af polymorfi: kompileringstid (statisk) og kørselstid (dynamisk). Forståelse af hvordan og hvornår hver type anvendes, er afgørende for at skrive fleksibel og effektiv kode.
Kompileringstidspolymorfi: opstår gennem funktion- eller operatoroverbelastning, hvor den metode der skal udføres, bestemmes ved kompilering.
Kørselstidspolymorfi: anvender virtuelle funktioner, hvilket gør det muligt for afledte klasser at overskrive basisklassens metoder, hvor den korrekte metode vælges under kørsel.
Anvendelse og behov for polymorfi
En glimrende måde at forstå polymorfi på er gennem en analogi fra den virkelige verden. Overvej en grafisk brugergrænseflade med en knap. Denne knap kan opføre sig forskelligt afhængigt af konteksten—den kan fungere som en upload-knap, en nulstil-knap eller en annuller-knap.
Hver knap udfører en særskilt handling, når den klikkes på, men de fungerer alle grundlæggende som knapper. Se den teoretiske implementering af dette koncept.
UploadButton.h
ResetButton.h
CancelButton.h
class UploadButton : public Button { public: void onClick() { std::cout << "Upload" << std::endl; } };
Da alle knapper deler den samme onClick()
-metode med forskellige implementeringer, lad os undersøge dette nærmere. Hvad hvis vi har brug for en funktion, der accepterer et objekt tilhørende en af knap-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 manuel oprettelse af separate funktioner for hver knap skabe kompleksitet, især ved ændringer, da hver funktion skal redigeres individuelt, hvis der opstår problemer. Derudover vil der i hovedfunktionen være behov for yderligere kontrol for at afgøre, hvilken funktion der skal kaldes. Polymorfi muliggør en nem løsning på disse problemer.
Tak for dine kommentarer!