Jobber med arv i C ++

I denne opplæringen skal vi snakke om arv i C ++, et veldig interessant emne, la oss se det gjennom et enkelt eksempel. For folk som er på Windows, kan du laste ned en IDE for å programmere, det vil hjelpe deg med å kompilere og kjøre programmene, vi lar lenken nedenfor være:

DEVC ++

Her skal vi bruke Linux, spesielt Ubuntu, som allerede har en kompilator for C ++. C ++ - språket, som alle sikkert vet, tillater flere arv, i motsetning til Java, som bare tillater enkel arv, og hvis vi vil ha noe lignende må vi trekke grensesnitt, til slutt er det mindre utsatt for feil.

Hovedeksemplet som vi skal vise her for å se arv i C ++ er enkelt, vi kommer ikke til å gå inn i flere arv, bortsett fra på slutten for å vise en feil som vi kan påvirkes med.

1. Enkel arv i C ++


For å starte det første eksemplet, enkel arv, vil vi ha en klasse Dyr, som vil være vår grunnklasse eller forelder, og 2 klasser som vil arve, Hund som ikke vil ha noen kode og Katt som vil legge til en ny parameter i foreldreklassen. La oss se koden (den er kort):
 #inkludere bruk av navneområde std; klasse Dyr {privat: int alder; offentlig: Dyr (int a = 1) {alder = a; }; int getAge () const {return age;} void setAge (int a = 9) {age = a; }}; klasse Hund: offentlig dyr {}; klasse Cat: public Animal {private: float weight; offentlig: Cat (int a = 2, float w = 3.2): Animal (a) {weight = w; } float getWeight () const {returvekt;}}; int main () {Dog mastin; cout << "____HUND____" << endl; cout << "Before:" << 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 antar at du allerede kjenner noen C ++ for å se på arvsproblemer, og derfor vil vi ikke forklare delene av funksjoner eller offentlige og private deler. For å arve fra en klasse har vi følgende syntaks:
 klasse datter_klasse: offentlig foreldre_klasse
Så i vårt eksempel for å lage klassen Hund vi har brukt:
 klasse Hund: offentlig dyr
Indikerer det Hund arver fra Animal, alt som Animal -klassen har i sine offentlige eller beskyttede blokker, kan vi bruke den, men hvis vi bruker den private blokken, får vi en feilmelding. God klasse Hund den er tom, så den har ingen store vanskeligheter.

Hvis vi går i klassen Katt, har vi den samme klassedeklarasjonen som før, bortsett fra at vi ser at den legger til en ny variabel vekt, denne variabelen har ikke den eller klassen Dyr, ingen Hund. Her i konstruktøren av klassen har vi kalt konstruktøren for foreldreklassen, og dermed sender vi dataene for variabelen alder, og vi fyller også ut variabelen vekt.

MerkDu kan se at parametrene vi sender til funksjonene kan ha en standardverdi.

I hoved- vi lager et objekt i klassen Hund, vi forlater alderen som standard, og viser den, så bruker vi funksjonen setAge for å endre alderen og vise den igjen. Til slutt lager vi et objekt i klassen Katt, og denne gangen lar vi ikke variablene ha en standardverdi, og vi sender dem til dem når vi lager objektet, og for ikke å variere viser vi dem.

Hvis vi vil kjør denne koden i en linux -terminal med g ++, gjør vi følgende:

 g ++ -o test tesc.gcc
Og for å kjøre det veldig enkelt:
 ./test
Vi skal vise en fangst med kompilering og kjøring av den lille koden:

2. Flere arv i C ++


For å se dem farene ved flere arv vi kommer til å legge igjen en veldig liten kode:
 #inkludere bruk av 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: offentlig dyr, offentlig pattedyr {}; int main () {Dog dog; dog.walk (); } 
Vi ser det Hund arver fra Dyr Y Pattedyr, og begge klassene har samme funksjon å gå, hvis jeg bruker den normale funksjonen som i koden:
 dog.walk ()
Og vi kompilerer vi får følgende feil:

For å løse det kan vi bruke følgende syntaks, for å kalle funksjonen Dyr:

 hund.Dyr :: walk ();
eller å bruke klassen Pattedyr:
 dog.Mamifero :: walk ();
Og selvfølgelig er den beste løsningen å ikke ha to funksjoner med samme navn hvis vi skal bruke flere arv, i dette programmet er det veldig enkelt å løse det, men i en stor kan det bli hodepine.

Likte og hjalp du denne opplæringen?Du kan belønne forfatteren ved å trykke på denne knappen for å gi ham et positivt poeng

Du vil bidra til utvikling av området, dele siden med vennene dine

wave wave wave wave wave