Darbas su paveldėjimu C ++

Šioje pamokoje mes kalbėsime apie paveldėjimas C ++, labai įdomi tema, pažiūrėkime per paprastą pavyzdį. Žmonėms, naudojantiems „Windows“, galite atsisiųsti IDE į programą, kuri padės jums surinkti ir paleisti programas, paliekame žemiau esančią nuorodą:

DEVC ++

Čia mes naudosime „Linux“, ypač „Ubuntu“, kuris jau turi kompiliatorių C ++. C ++ kalba, kaip tikriausiai visi žino, leidžia daug kartų paveldėti, skirtingai nei „Java“, kuri leidžia tik paprastą paveldėjimą ir, jei norime kažko panašaus, turime ištraukti sąsajas, galų gale ji yra mažiau linkusi į klaidas.

Pagrindinis pavyzdys, kurį mes parodysime čia, norėdami pamatyti paveldėjimą C ++, yra paprastas, nesiruošiame į daugialypį paveldėjimą, nebent pabaigoje parodysime klaidą, dėl kurios galime būti paveikti.

1. Paprastas paveldėjimas C ++


Norėdami pradėti pirmąjį pavyzdį, paprastą paveldėjimą, turėsime klasę Gyvūnas, kuri bus mūsų bazinė klasė arba vienas iš tėvų, ir 2 klasės, kurios paveldės, Šuo kuris neturės jokio kodo ir Katė kuris pridės naują parametrą prie tėvų klasės. Pažiūrėkime kodą (jis trumpas):
 #include naudojant vardų sritį std; klasė Gyvūnas {privatus: int amžius; viešas: Gyvūnas (int a = 1) {amžius = a; }; int getAge () const {return age;} void setAge (int a = 9) {amžius = a; }}; klasės šuo: viešas gyvūnas {}; klasė Katė: viešas Gyvūnas {privatus: plūdinis svoris; viešas: Katė (int a = 2, plūdė w = 3.2): Gyvūnas (a) {svoris = w; } float getWeight () const {grąžinimo svoris;}}; int main () {Šuns mastinas; cout << "____DOG____" << endl; cout << "Prieš:" << mastin.getAge () << endl; mastin.setAge (2); cout << "After:" << mastin.getAge () << endl; Katės miau (3, 4.1); cout << "____CAT____" << endl; cout << meow.getAge () << "" << meow.getWeight () << endl; } 
Darome prielaidą, kad jūs jau žinote kai kuriuos C ++, kad pamatytumėte paveldėjimo problemas, taigi ir funkcijų dalių arba viešųjų ir privačių dalių, kurių neketiname paaiškinti. Norėdami paveldėti iš klasės, turime šią sintaksę:
 klasės dukros_klasė: vieša tėvų_ klasė
Taigi mūsų pavyzdyje sukurti klasę Šuo mes naudojome:
 klasės Šuo: viešas Gyvūnas
Tai rodo Šuo paveldime iš „Animal“, visa tai, ką „Animal“ klasė turi viešuose ar apsaugotuose blokuose, galime naudoti, tačiau jei naudosime privatų bloką, gausime klaidą. Gera klasė Šuo jis tuščias, todėl didelių sunkumų neturi.

Jei einame į klasę Katė, mes turime tą pačią klasės deklaraciją kaip ir anksčiau, be to, matome, kad ji prideda naują kintamąjį svorio, šis kintamasis neturi nei jo, nei klasės Gyvūnas, nei Šuo. Čia, klasės konstruktoriuje, mes pavadinome pirminės klasės konstruktorių, todėl perduodame kintamojo duomenis amžiaus, taip pat užpildome kintamąjį svorio.

PastabaMatote, kad funkcijoms perduodami parametrai gali turėti numatytąją vertę.

Viduje pagrindinis sukuriame klasės objektą Šuo, pagal numatytuosius nustatymus paliekame amžių ir parodome jį, tada naudojame funkciją setAge pakeisti amžių ir vėl jį parodyti. Galiausiai sukuriame klasės objektą Katė, ir šį kartą mes neleidžiame kintamiesiems turėti numatytosios vertės ir juos perduodame jiems kurdami objektą, o kad nesikeistume, mes juos rodome.

Jei norime paleiskite šį kodą „Linux“ terminale naudodami g ++, mes darome taip:

 g ++ -o testas tesc.gcc
Ir paleisti labai paprasta:
 ./testas
Mes parodysime užfiksavimą, surinkdami ir vykdydami mažą kodą:

2. Daugkartinis paveldėjimas C ++


Norėdami juos pamatyti daugialypio paveldėjimo pavojus paliksime labai mažą kodą:
 #include naudojant vardų sritį std; klasė Gyvūnas {public: void walk () {cout << "Vaikščiojimas gyvūnu" << endl; }}; klasė Žinduoliai {public: void walk () {cout << "Walking in Mammal" << endl; }}; klasės šuo: viešas gyvūnas, viešas žinduolis {}; int main () {Šuns šuo; šuo.pėsčiomis (); } 
Mes tai matome Šuo paveldi iš Gyvūnas Y Žinduolis, ir abi klasės atlieka tą pačią funkciją vaikščioti, jei naudojuosi įprasta funkcija, kaip nurodyta kode:
 dog.walk ()
Sudarydami gauname šią klaidą:

Norėdami tai išspręsti, mes galime naudoti šią sintaksę, kad iškviestume funkciją Gyvūnas:

 šuo.Gyvūnas :: vaikščioti ();
arba naudoti klasę Žinduolis:
 šuo.Mamifero :: walk ();
Ir, žinoma, geriausias sprendimas yra neturėti dviejų funkcijų tuo pačiu pavadinimu, jei ketiname pasinaudoti daugialypiu paveldėjimu, šioje programoje tai labai lengva išspręsti, tačiau dideliu atveju tai gali tapti galvos skausmu.

Ar jums patiko ir padėjo ši pamoka?Galite apdovanoti autorių paspausdami šį mygtuką, kad suteiktumėte jam teigiamą tašką
wave wave wave wave wave