I den här handledningen ska vi prata om arv i C ++, ett mycket intressant ämne, låt oss se det genom ett enkelt exempel. För personer som är på Windows kan du ladda ner en IDE till programmet, det hjälper dig att sammanställa och köra programmen, vi lämnar länken nedan:
DEVC ++
Här ska vi använda Linux, specifikt Ubuntu, som redan har en kompilator för C ++. C ++ - språket, som alla förmodligen vet, tillåter flera arv, till skillnad från Java, som bara tillåter enkelt arv och om vi vill ha något liknande måste vi dra gränssnitt, i slutändan är det mindre benäget för fel.
Huvudexemplet som vi ska visa här för att se arv i C ++ är enkelt, vi kommer inte att gå in i flera arv, förutom i slutet för att visa ett fel som vi kan påverkas av.
1. Enkelt arv i C ++
För att börja det första exemplet, enkelt arv, kommer vi att ha en klass Djur, som kommer att vara vår grundklass eller förälder, och 2 klasser som kommer att ärva, Hund som inte kommer att ha någon kod och Katt som kommer att lägga till en ny parameter i föräldraklassen. Låt oss se koden (den är kort):
#inkludera med namnrymd std; klass Djur {privat: int ålder; offentligt: Djur (int a = 1) {ålder = a; }; int getAge () const {return age;} void setAge (int a = 9) {age = a; }}; klass Hund: offentligt djur {}; klass Cat: public Animal {private: float weight; allmänhet: Cat (int a = 2, float w = 3.2): Animal (a) {weight = w; } float getWeight () const {returvikt;}}; int main () {Dog mastin; cout << "____DOG____" << endl; cout << "Innan:" << 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 att du redan känner till några C ++ för att fortsätta se arvsproblem, och därför delar vi inte funktioner eller offentliga och privata delar. För att ärva från en klass har vi följande syntax:
klass dotterklass: offentlig förälderklassSå i vårt exempel för att skapa klassen Hund vi har använt:
klass Hund: offentligt djurIndikerar att Hund ärver från Animal, allt som djurklassen har i sina offentliga eller skyddade block kan vi använda det, men om vi använder det privata blocket får vi ett fel. Bra klass Hund det är tomt, så det har inga större svårigheter.
Om vi går i klassen Katt, vi har samma klassdeklaration som tidigare, förutom att vi ser att den lägger till en ny variabel vikt, denna variabel har inte den eller klassen Djur, inte heller Hund. Här i konstruktören för klassen har vi kallat konstruktören för föräldraklassen, så vi skickar data för variabeln ålder, och vi fyller också i variabeln vikt.
NoteraDu kan se att parametrarna som vi skickar till funktionerna kan ha ett standardvärde.
I huvud vi skapar ett objekt i klassen Hund, vi lämnar åldern som standard och visar den, sedan använder vi funktionen setAge att ändra åldern och visa den igen. Slutligen skapar vi ett objekt i klassen Katt, och den här gången låter vi inte variablerna ha ett standardvärde och vi skickar dem till dem när objektet skapas, och för att inte variera visar vi dem.
Om vi vill kör den här koden i en linux -terminal med g ++, gör vi följande:
g ++ -o test tesc.gccOch för att köra det väldigt enkelt:
./testaVi kommer att visa en fångst med kompilering och körning av den lilla koden:
2. Multipel arv i C ++
Att se dem farorna med flera arv vi kommer att lämna en mycket liten kod:
#inkludera med namnrymd std; klass Animal {public: void walk () {cout << "Walking in Animal" << endl; }}; klass Däggdjur {public: void walk () {cout << "Walking in Mammal" << endl; }}; klass Hund: offentligt djur, offentligt däggdjur {}; int main () {Hundhund; dog.walk (); }Vi ser det Hund ärver från Djur Y Däggdjur, och båda klasserna har samma funktion att gå, om jag använder den normala funktionen som i koden:
dog.walk ()Och vi kompilerar får vi följande fel:
För att lösa det kan vi använda följande syntax, för att kalla funktionen Djur:
hund.Djur :: walk ();eller att använda klassen Däggdjur:
dog.Mamifero :: walk ();Och naturligtvis är den bästa lösningen att inte ha två funktioner med samma namn om vi ska använda flera arv, i det här programmet är det väldigt enkelt att lösa det, men i en stor kan det bli huvudvärk. Gillade du och hjälpte denna handledning?Du kan belöna författaren genom att trycka på den här knappen för att ge honom en positiv poäng