Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Introduktion till Polymorfism | Översikt av Polymorfism
C++ OOP
course content

Kursinnehåll

C++ OOP

C++ OOP

1. Grunderna i OOP i C++
2. Konstruktorer och Destruktorer
3. Översikt Av Inkapsling
4. Översikt av Arv
5. Översikt av Polymorfism

book
Introduktion till Polymorfism

Note
Definition

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

UploadButton.h

ResetButton.h

ResetButton.h

CancelButton.h

CancelButton.h

copy
1234
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

main.cpp

copy
1234567891011
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.

question mark

Vad är den bokstavliga betydelsen av termen polymorfism?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 5. Kapitel 1

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

course content

Kursinnehåll

C++ OOP

C++ OOP

1. Grunderna i OOP i C++
2. Konstruktorer och Destruktorer
3. Översikt Av Inkapsling
4. Översikt av Arv
5. Översikt av Polymorfism

book
Introduktion till Polymorfism

Note
Definition

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

UploadButton.h

ResetButton.h

ResetButton.h

CancelButton.h

CancelButton.h

copy
1234
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

main.cpp

copy
1234567891011
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.

question mark

Vad är den bokstavliga betydelsen av termen polymorfism?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 5. Kapitel 1
some-alt