Video: Programmering 2 - OOP Arv 2024
I nheritance i C ++ en klasss förmåga att ärva kapaciteter eller egenskaper från en annan klass. Arv är ett vanligt begrepp. Du ärvererar vissa egenskaper från klassen Mänsklig, som min förmåga att (mer eller mindre) förmedla mig intelligent och mitt beroende av luft, vatten och kolhydratbaserad näring (lite för beroende av den senare).
Dessa egenskaper är inte unika för människor. Klassen Mänsklig ärver de beroende av luft, vatten och näring från klassen Mammal, som ärvde den från klassen Animal.
Möjligheten att överföra egenskaper är en kraftfull. Det gör att du kan beskriva saker på ett ekonomiskt sätt. Till exempel, om någon frågar, "Vad är en anka? "Du kan säga," Det är en fågel som går iväg. "
Trots vad du kanske tror, ger det svaret en stor mängd information. Han vet vad en fågel är, och nu vet han alla samma saker om en anka plus andens extra egenskap av "kvackhet". ”
Objektorienterade (OO) språk uttrycker detta arvsförhållande genom att tillåta en klass att ärva från en annan. OO-språk kan generera en modell som ligger närmare den verkliga världen (kom ihåg det verkliga ämnet!) Än modellen som genereras av språk som inte stöder arv.
C ++ tillåter en klass att ärva en annan klass enligt följande:
klass Student {}; klass GraduateStudent: allmän student {};
Här en GraduateStudent ärver alla medlemmarna av Student. Således en GraduateStudent IS_A Student . (Kapitaliseringen av IS_A betonar vikten av detta förhållande.) Naturligtvis kan GraduateStudent också innehålla andra medlemmar som är unika för en GraduateStudent .
Erfarenhet infördes i C ++ av flera skäl. Naturligtvis är den stora orsaken förmågan att uttrycka arvsleden. En mindre anledning är att minska mängden skrivning.
Antag att du har en klass Student, och du blir ombedd att lägga till en ny klass som heter GraduateStudent. Arv kan drastiskt minska antalet saker du måste sätta i klassen. Allt du verkligen behöver i klassen GraduateStudent är saker som beskriver skillnaderna mellan studenter och doktorander.
En annan bieffekt har att göra med mjukvaruändring. Antag att du ärva från någon befintlig klass. Senare finner du att basklassen inte gör exakt vad subklassen behöver.Eller kanske har klassen en insats.
Ändring av basklassen kan bryta mot annan kod som använder den grundläggande klassen. Att skapa och använda en ny underklass som överbelastar den felaktiga funktionen med en korrigerad version löser ditt problem utan att orsaka ytterligare problem för någon annan.