Rad s nasljeđivanjem u C ++

U ovom vodiču ćemo govoriti o nasljeđivanje u C ++, vrlo zanimljiva tema, pogledajmo to kroz jednostavan primjer. Za osobe koje rade na Windowsima možete preuzeti IDE za programiranje, pomoći će vam pri sastavljanju i pokretanju programa, ostavljamo donju vezu:

DEVC ++

Ovdje ćemo koristiti Linux, točnije Ubuntu, koji već ima prevoditelj za C ++. C ++ jezik, kao što svi vjerojatno znaju, dopušta više nasljeđivanja, za razliku od Jave, koja dopušta samo jednostavno nasljeđivanje, a ako želimo nešto slično moramo povući sučelja, na kraju je manje sklon pogreškama.

Glavni primjer koji ćemo ovdje prikazati da bismo vidjeli nasljeđivanje u C ++ je jednostavan, nećemo ulaziti u više nasljeđivanja, osim na kraju da prikažemo grešku s kojom možemo utjecati.

1. Jednostavno nasljeđivanje u C ++


Za početak prvog primjera, jednostavnog nasljeđivanja, imat ćemo klasu Životinja, koja će biti naša osnovna klasa ili roditelj, i 2 klase koje će naslijediti, Pas koji neće imati nikakav kod i Mačka koji će roditeljskoj klasi dodati novi parametar. Pogledajmo kod (kratak je):
 #include using namespace std; razred Životinja {privatno: int dob; javno: Životinja (int a = 1) {dob = a; }; int getAge () const {povratna dob;} void setAge (int a = 9) {dob = a; }}; razredni pas: javna životinja {}; klasa Mačka: javna Životinja {privatno: plovna težina; javno: Mačka (int a = 2, plovak w = 3,2): Životinja (a) {težina = w; } float getWeight () const {povratna težina;}}; int main () {Pas mastin; cout << "____DOG____" << endl; cout << "Prije:" << mastin.getAge () << endl; mastin.setAge (2); cout << "Poslije:" << mastin.getAge () << endl; Mačje mijaukanje (3, 4.1); cout << "____CAT____" << endl; cout << meow.getAge () << "" << meow.getWeight () << endl; } 
Pretpostavljamo da već znate neki C ++ koji će vam pomoći da pogledate pitanja nasljeđivanja, pa stoga dijelove funkcija ili javne i privatne dijelove nećemo objašnjavati. Za nasljeđivanje iz klase imamo sljedeću sintaksu:
 klasa kći_klasa: javna roditelj_klasa
Dakle, u našem primjeru stvoriti klasu Pas koristili smo:
 razred Pas: javna Životinja
Ukazuje na to Pas nasljeđuje od Animal, sve što klasa Animal ima u svojim javnim ili zaštićenim blokovima možemo ga koristiti, međutim ako koristimo privatni blok dobit ćemo pogrešku. Dobar razred Pas prazan je pa nema većih poteškoća.

Ako idemo na nastavu Mačka, imamo istu deklaraciju klase kao i prije, osim toga vidimo da dodaje novu varijablu težina, ova varijabla nema to niti klasu Životinja, ni jedno ni drugo Pas. Ovdje smo u konstruktoru klase nazvali konstruktor roditeljske klase, pa prosljeđujemo podatke za varijablu dob, a unosimo i varijablu težina.

BilješkaMožete vidjeti da parametri koje prosljeđujemo funkcijama mogu imati zadanu vrijednost.

U glavni stvaramo objekt klase Pas, prema zadanim postavkama ostavljamo dob i prikazujemo je, a zatim koristimo funkciju setAge promijeniti dob i ponovno je pokazati. Na kraju stvaramo objekt klase Mačka, i ovaj put ne dopuštamo da varijable imaju zadanu vrijednost te im ih prosljeđujemo pri kreiranju objekta, a kako se ne bi mijenjale mi ih prikazujemo.

Ako želimo pokrenite ovaj kôd u Linux terminalu s g ++, radimo sljedeće:

 g ++ -o test tesc.gcc
I pokrenuti ga vrlo jednostavno:
 ./test
Pokazat ćemo snimku sa kompilacijom i izvršavanjem malog koda:

2. Više nasljeđivanja u C ++


Da ih vidim opasnosti od više nasljeđivanja ostavit ćemo vrlo mali kod:
 #include using namespace std; klasa Životinja {public: void walk () {cout << "Walking in Animal" << endl; }}; klasa Sisavac {public: void walk () {cout << "Hodanje u sisavcima" << endl; }}; razredni pas: javna životinja, javni sisavac {}; int main () {Pas pas; dog.walk (); } 
To vidimo Pas nasljeđuje od Životinja Y Sisavac, a obje klase imaju istu funkciju hodati, ako koristim normalnu funkciju kao u kodu:
 dog.walk ()
Kompilacijom dobivamo sljedeću pogrešku:

Da bismo to riješili, možemo upotrijebiti sljedeću sintaksu za pozivanje funkcije Životinja:

 pas.Životinja :: šetnja ();
ili koristiti razred Sisavac:
 pas.Mamifero :: walk ();
I naravno, najbolje rješenje nije imati 2 funkcije s istim imenom ako ćemo koristiti više nasljeđivanja, u ovom programu to je vrlo lako riješiti, ali u velikom može postati glavobolja.

Je li vam se svidio i pomogao ovaj vodič?Autor možete nagraditi pritiskom na ovaj gumb kako biste mu dali pozitivan bod

Vi ćete pomoći u razvoju web stranice, dijeljenje stranicu sa svojim prijateljima

wave wave wave wave wave