Arbejde med arv i C ++

I denne tutorial vil vi tale om arv i C ++, et meget interessant emne, lad os se det gennem et enkelt eksempel. For folk, der er på Windows, kan du downloade en IDE til at programmere, det hjælper dig med at kompilere og køre programmerne, vi forlader linket herunder:

DEVC ++

Her skal vi bruge Linux, specifikt Ubuntu, som allerede har en compiler til C ++. C ++ - sproget, som alle sikkert kender, tillader flere arv, i modsætning til Java, som kun tillader simpel arv, og hvis vi vil have noget lignende, skal vi trække grænseflader, i sidste ende er det mindre tilbøjeligt til fejl.

Hovedeksemplet, som vi vil vise her for at se arv i C ++, er enkelt, vi kommer ikke til at komme i flere arv, undtagen i slutningen for at vise en fejl, som vi kan blive påvirket af.

1. Enkel arv i C ++


For at starte det første eksempel, simpel arv, har vi en klasse Dyr, som vil være vores grundklasse eller forælder, og 2 klasser, der vil arve, Hund som ikke vil have nogen kode og Kat som tilføjer en ny parameter til forældreklassen. Lad os se koden (den er kort):
 #inklusiv brug af navneområde std; klasse Dyr {privat: int alder; offentligt: ​​Dyr (int a = 1) {alder = a; }; int getAge () const {return age;} void setAge (int a = 9) {age = a; }}; klasse Hund: offentligt dyr {}; klasse Kat: offentlig dyr {privat: flydevægt; offentligt: ​​Cat (int a = 2, float w = 3.2): Animal (a) {weight = w; } float getWeight () const {returvægt;}}; int main () {Hundemastin; cout << "____HUND____" << endl; cout << "Før:" << mastin.getAge () << endl; mastin.setAge (2); cout << "After:" << mastin.getAge () << endl; Cat meow (3, 4.1); cout << "____CAT____" << endl; cout << meow.getAge () << "" << meow.getWeight () << endl; } 
Vi går ud fra, at du allerede kender nogle C ++ til at se problemer med arv, og derfor vil vi ikke forklare dele af funktioner eller offentlige og private dele. For at arve fra en klasse har vi følgende syntaks:
 klasse datter_klasse: offentlig forældreklasse
Så i vores eksempel for at oprette klassen Hund vi har brugt:
 klasse Hund: offentligt dyr
Angiver det Hund arver fra Animal, alt hvad dyreklassen har i sine offentlige eller beskyttede blokke, vi kan bruge den, men hvis vi bruger den private blok, får vi en fejl. God klasse Hund den er tom, så den har ingen større vanskeligheder.

Hvis vi går i klasse Kat, vi har den samme klasseerklæring som før, bortset fra det ser vi, at den tilføjer en ny variabel vægt, denne variabel har hverken den eller klassen Dyr, ingen af ​​dem Hund. Her i konstruktøren af ​​klassen har vi kaldt konstruktøren af ​​forældreklassen, og dermed videregiver vi dataene for variablen alder, og vi udfylder også variablen vægt.

BemærkDu kan se, at de parametre, vi videregiver til funktionerne, kan have en standardværdi.

I vigtigste vi skaber et objekt i klassen Hund, vi forlader alderen som standard og viser den, så bruger vi funktionen setAge for at ændre alderen og vise den igen. Endelig skaber vi et objekt i klassen Kat, og denne gang lader vi ikke variablerne have en standardværdi, og vi videregiver dem til dem, når vi opretter objektet, og for ikke at variere viser vi dem.

Hvis vi vil kør denne kode i en linux -terminal med g ++, gør vi følgende:

 g ++ -o test tesc.gcc
Og for at køre det meget let:
 ./prøve
Vi kommer til at vise en capture med kompilering og udførelse af den lille kode:

2. Multiple arv i C ++


At se dem farer ved multipel arv vi vil efterlade en meget lille kode:
 #inklusiv brug af navneområde std; klasse Animal {public: void walk () {cout << "Walking in Animal" << endl; }}; klasse Pattedyr {public: void walk () {cout << "Walking in Mammal" << endl; }}; klasse Hund: offentligt dyr, offentligt pattedyr {}; int main () {Hund hund; hund.gang (); } 
Det ser vi Hund arver fra Dyr Y Pattedyr, og begge klasser har den samme funktion at gå, hvis jeg gør brug af den normale funktion som i koden:
 dog.walk ()
Og vi kompilerer, vi får følgende fejl:

For at løse det kan vi bruge følgende syntaks til at kalde funktionen Dyr:

 hund.Dyr :: gang ();
eller at bruge klassen Pattedyr:
 hund.Mamifero :: walk ();
Og selvfølgelig er den bedste løsning ikke at have 2 funktioner med samme navn, hvis vi skal bruge flere arv, i dette program er det meget let at løse det, men i en stor kan det blive hovedpine.

Kan du lide og hjælpe denne vejledning?Du kan belønne forfatteren ved at trykke på denne knap for at give ham et positivt punkt

Du vil bidrage til udviklingen af ​​hjemmesiden, at dele siden med dine venner

wave wave wave wave wave