Kursinnhold
C++ OOP
C++ OOP
Introduksjon til Polymorfisme
Polymorfisme er et sentralt begrep. Ordet stammer fra gresk og betyr "mange former". Det gjør det mulig for objekter fra ulike classes
å behandles som et objekt av en felles superklasse. Det viktigste aspektet er at ulike enheter kan svare på samme melding eller metodekall på sin egen måte.
Typer polymorfisme
Det finnes to hovedtyper polymorfisme: kompileringstid (statisk) og kjøringstid (dynamisk). Å forstå hvordan og når man bruker hver type er avgjørende for å skrive fleksibel og effektiv kode.
Kompileringstidspolymorfisme: oppstår gjennom funksjons- eller operatoroverlasting, der metoden som skal utføres bestemmes under kompilering.
Kjøringstidspolymorfisme: bruker virtuelle funksjoner, slik at avledede klasser kan overstyre metoder fra basisklassen, og riktig metode velges under kjøring.
Anvendelse og behov for polymorfisme
En god måte å forstå polymorfisme på er gjennom en analogi fra virkeligheten. Tenk på et grafisk brukergrensesnitt med en knapp. Denne knappen kan oppføre seg forskjellig avhengig av konteksten—den kan fungere som en opplastingsknapp, en tilbakestillingsknapp eller en avbryt-knapp.
Hver knapp utfører en distinkt handling når den klikkes på, men alle fungerer i bunn og grunn som knapper. Se på den teoretiske implementeringen av dette konseptet.
UploadButton.h
ResetButton.h
CancelButton.h
class UploadButton : public Button { public: void onClick() { std::cout << "Upload" << std::endl; } };
Siden alle knappene deler den samme onClick()
-metoden med ulike implementasjoner, la oss se nærmere på dette. Hva om vi trenger en funksjon som tar et objekt som tilhører 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 det å manuelt opprette separate funksjoner for hver knapp skape kompleksitet, spesielt ved endringer, siden hver funksjon må redigeres individuelt hvis det oppstår problemer. I tillegg vil det i hovedfunksjonen være nødvendig med ekstra sjekker for å avgjøre hvilken funksjon som skal kalles. Polymorfisme gir en enkel løsning på disse problemene.
Takk for tilbakemeldingene dine!