¿Dynamisk bindning, polymorfism (c++)?
Om man deklarerar en funktion som virtuell tillåter man att underklassers eventuella egna implementationer av funktionen alltid körs istället för basklassens; även om man till exempel konverterar en underklasspekare till basklassens typ innan anropet görs.
class A
{
public:
void fkn1()
{
cout << "A1" << endl;
}
virtual void fkn2()
{
cout << "A2" << endl;
}
};
class B: public A
{
public:
void fkn1()
{
cout << "B1" << endl;
}
void fkn2()
{
cout << "B2" << endl;
}
};
///////////
A* a1 = new A();
a1->fkn1(); //inga konstigheter; ger "A1"
a1->fkn2(); // "A2"
B* b1 = new B();
b1->fkn1(); // "B1"
b1->fkn2(); // "B2"
A* q = b1;
q->fkn1(); // Här kommer dock A::fkn1() anropas, då q är av typen A* (trots att objektet "egentligen" är av typen B), och resultera i "A1"
q->fkn2(); // "virtual" löser "problemet": "B2"
///////////
Polymorphism tillämpas när du använder dig av en pekare av basklasstyp för att peka på något objekt som ärver från basklassen. T.ex. om du har basklassen Animal så kan du skapa subklassen Kanin som ärver från Animal. Eftersom att Kanin är en subklass och Animal är en basklass är det möjligt att använda sig av en pekare av basklasstypen (Animal) för att peka på ett subklass-objekt (Kanin).
Den dynamiska bindningen kommer alltså in, som ovanstående skriver, när man vill komma åt specifika funktioner men även överskuggade funktioner som finns hos subklassen. Som inte är definierade som virtual i basklassen. Har man då alltså en Animal-pekare och ett Kanin-objekt, och försöker kalla på funktioner så kommer du endast åt de funktioner som finns hos basklassen (Animal). Vilket gör att även om man har överskuggat en funktion hos Kanin som ärvdes från Animal som kommer den grundform som finns i Animal köras, trots att det är ett Kanin-objekt.
För att förhindra det här, använder mig sig alltså av dynamisk bindning och byter pekartyp under programkörning. I C++ använder man då dynamic_cast som tillfälligt kastar objektet till en pekare av samma typ. Vilket gör det möjligt att använda subklassens egna funktioner.
Tack för ni tog er tid att förklara!
<<taailyn>> bra skrivet, lätt att förstå:)
- Igår Nvidia: "Energieffektiva RTX 4060 sparar hundralappar" 36
- Igår MSI Geforce RTX 4060 Ventus 2X OC – bra prestanda vid 1080p men medioker kylare 45
- Igår Noctua släpper monteringsram för "deliddade" Ryzen 7000-processorer 15
- Igår Nvidias nästa arkitektur för Geforce kommer år 2025 58
- 27 / 6 Afox släpper kompakt Geforce RTX 4090 36
- Igår Veckans fråga: Vilket operativsystem föredrar du? 79
- Igår Bilar med smarta inslag ger fler dumma fel 58
- 27 / 6 Telekombranschen: "Smarta glasögon ersätter telefoner inom fem år" 88
- 26 / 6 Lastpass-användare rasar – kan inte logga in 59
- 26 / 6 Inet frågar SweClockers – Vad skulle du vilja förbättra på Inet.se? 53
- Solfilm till fönster för sommarvärmen. Behöver råd.30
- Hjälp angående gammal psu och "nytt" grafikkort2
- Ert dyraste ” datormisstag”?402
- Vad lyssnar du på just nu?12615
- Fästingar.2
- Krönika: Teknikutvecklingen avstannar – men det gör också uppgraderingsbehovet67
- Bildvisnings program6
- Dator från Inet (30k~)1
- Kommer flytta till stan och mitt wifi kommer säkert synas av hundratals människor varje dag. Vilken router ska jag köpa och hur ska den ställas in?7
- Vilken serie såg du senast?1253
- Säljes LG 27'' UltraGear 27GP950 4K Nano IPS 160 Hz HDMI 2.1
- Säljes Star Wars Jedi AMD kod
- Säljes Trasig Xiaomi Mi Electric Scooter (M365) Svart
- Säljes 5800x3D + x570 Meg Unify + be quiet! Dark Rock Slim
- Säljes AMD ASUS DUAL RX6700XT
- Säljes Dell OptiPlex 7010
- Säljes Datordelar: i5 9600k + 1070 GTX mm.
- Säljes 1080 TI | Vattenblock | 1TB SSD | Apple Watch 4 Stainless | Hörlurar | Mikrofon
- Säljes Intressekoll: Xbox Series S 512Gb samt Switch Oled 64Gb Vit
- Säljes Gamingdator RTX 3090, i9-10900K, 32GB ram
- Nvidia: "Energieffektiva RTX 4060 sparar hundralappar"36
- MSI Geforce RTX 4060 Ventus 2X OC – bra prestanda vid 1080p men medioker kylare45
- Veckans fråga: Vilket operativsystem föredrar du?79
- Bilar med smarta inslag ger fler dumma fel58
- Noctua släpper monteringsram för "deliddade" Ryzen 7000-processorer15
- Nvidias nästa arkitektur för Geforce kommer år 202558
- Microsoft vill strömma Windows från molnet71
- Starfield utvecklas med AMD:s välsignelse148
- Telekombranschen: "Smarta glasögon ersätter telefoner inom fem år"88
- En av tre svenskar använder annonsblockerare80
Externa nyheter
Spelnyheter från FZ
- Alan Wake och CoD: Kallt krig snart på PS Plus, enligt läcka igår
- Red Dead Redemption åldersmärkt igen i Korea – det spekuleras i remaster igår
- Fallout London flyttas för att slippa Starfield-konkurrensen igår
- Minecraft-filmen kan ha hittat sin Steve – Pedro "The Last of Us-Joel" Pascal igår
- Stor Diablo IV-patch släppt, mer XP och ombalanserade klasser igår