Darbs ar mantojumu C ++

Šajā apmācībā mēs runāsim par mantojums C ++, ļoti interesanta tēma, aplūkosim to ar vienkāršu piemēru. Cilvēkiem, kuri izmanto sistēmu Windows, jūs varat lejupielādēt IDE programmai, tas palīdzēs jums apkopot un palaist programmas, mēs atstājam zemāk esošo saiti:

DEVC ++

Šeit mēs izmantosim Linux, īpaši Ubuntu, kuram jau ir kompilators C ++. C ++ valoda, kā visi droši vien zina, pieļauj vairāku mantojumu, atšķirībā no Java, kas pieļauj tikai vienkāršu mantošanu, un, ja mēs vēlamies kaut ko līdzīgu, mums ir jāvelk saskarnes, galu galā tā ir mazāk pakļauta kļūdām.

Galvenais piemērs, ko mēs šeit parādīsim, lai redzētu mantojumu C ++, ir vienkāršs, mēs neiesaistīsimies vairākkārtējā mantojumā, izņemot beigās, lai parādītu kļūdu, ar kuru mēs varam tikt ietekmēti.

1. Vienkārša mantošana C ++


Lai sāktu pirmo piemēru, vienkāršu mantošanu, mums būs klase Dzīvnieks, kas būs mūsu bāzes klase vai vecāks, un 2 klases, kas manto, Suns kurā nebūs nekāda koda un Kaķis kas vecāku klasei pievienos jaunu parametru. Apskatīsim kodu (tas ir īss):
 #include izmantojot nosaukumvietas std; klase Dzīvnieks {privāts: int vecums; publisks: dzīvnieks (int a = 1) {vecums = a; }; int getAge () const {atgriešanās vecums;} void setAge (int a = 9) {vecums = a; }}; klases suns: publisks dzīvnieks {}; klase Kaķis: publisks Dzīvnieks {privāts: pludiņa svars; publisks: Kaķis (int a = 2, pludiņš w = 3,2): Dzīvnieks (a) {svars = w; } float getWeight () const {atgriešanās svars;}}; int main () {Suņa mastīns; cout << "____DOG____" << endl; cout << "Pirms:" << mastin.getAge () << endl; mastin.setAge (2); cout << "Pēc:" << mastin.getAge () << endl; Kaķu mjau (3, 4.1); cout << "____CAT____" << endl; cout << meow.getAge () << "" << meow.getWeight () << endl; } 
Mēs pieņemam, ka jūs jau zināt dažus C ++, lai turpinātu aplūkot mantojuma problēmas, un tāpēc to funkciju daļas vai publiskās un privātās daļas, kuras mēs neskaidrosim. Lai mantotu no klases, mums ir šāda sintakse:
 klases meitas_klase: publiska vecāku_klase
Tātad mūsu piemērā, lai izveidotu klasi Suns mēs esam izmantojuši:
 klase Suns: publisks Dzīvnieks
Norāda, ka Suns manto no dzīvnieka, visu, kas dzīvnieku klasei ir publiskajos vai aizsargātajos blokos, mēs varam to izmantot, tomēr, ja izmantosim privāto bloku, mēs saņemsim kļūdu. Laba klase Suns tas ir tukšs, tāpēc tam nav lielu grūtību.

Ja mēs ejam uz klasi Kaķis, mums ir tāda pati klases deklarācija kā iepriekš, izņemot to, ka mēs redzam, ka tas pievieno jaunu mainīgo svars, šim mainīgajam nav ne tā, ne klases Dzīvnieks, ne arī Suns. Šeit klases konstruktorā mēs esam izsaukuši vecāku klases konstruktoru, tādējādi mēs nododam mainīgā datus vecums, un mēs arī aizpildām mainīgo svars.

PiezīmeJūs varat redzēt, ka parametriem, kurus mēs nododam funkcijām, var būt noklusējuma vērtība.

Iekš galvenais mēs izveidojam klases objektu Suns, pēc noklusējuma atstājam vecumu un parādām to, tad izmantojam funkciju setAge lai mainītu vecumu un parādītu to vēlreiz. Visbeidzot, mēs izveidojam klases objektu Kaķis, un šoreiz mēs neļaujam mainīgajiem būt noklusējuma vērtībai, un mēs tos nododam tiem, veidojot objektu, un, lai tie nemainītos, mēs tos parādām.

Ja gribam palaidiet šo kodu Linux terminālī ar g ++, mēs rīkojamies šādi:

 g ++ -o tests tesc.gcc
Un, lai to izdarītu ļoti vienkārši:
 ./pārbaude
Mēs parādīsim uztveršanu, apkopojot un izpildot mazo kodu:

2. Vairāku mantojumu C ++


Lai tos redzētu vairāku mantojumu briesmas mēs atstāsim ļoti mazu kodu:
 #include izmantojot nosaukumvietas std; klase Dzīvnieks {public: void walk () {cout << "Pastaiga dzīvniekā" << endl; }}; klase Zīdītājs {public: void walk () {cout << "Pastaiga zīdītājā" << endl; }}; klases suns: publisks dzīvnieks, publisks zīdītājs {}; int main () {Suņu suns; suns.staiga (); } 
Mēs to redzam Suns manto no Dzīvnieks Y Zīdītājs, un abām klasēm ir viena un tā pati funkcija iet, ja es izmantoju parasto funkciju, kā norādīts kodā:
 suns. pastaiga ()
Un, apkopojot, mēs saņemam šādu kļūdu:

Lai to atrisinātu, mēs varam izmantot šādu sintaksi, lai izsauktu funkciju Dzīvnieks:

 suns.Dzīvnieks :: staigāt ();
vai izmantot klasi Zīdītājs:
 suns.Mamifero :: staigāt ();
Un, protams, labākais risinājums nav izmantot divas funkcijas ar tādu pašu nosaukumu, ja mēs izmantosim daudzkārtēju mantojumu, šajā programmā to ir ļoti viegli atrisināt, bet lielā gadījumā tas var kļūt par galvassāpēm.

Vai jums patika šī apmācība un palīdzējāt tai?Jūs varat apbalvot autoru, nospiežot šo pogu, lai sniegtu viņam pozitīvu punktu

Jums palīdzēs attīstību vietā, daloties lapu ar draugiem

wave wave wave wave wave