C Clase de dezvoltare și moștenire

Tot ce ai aflat în tutorialele anterioare a făcut, desigur, deja parte din limbajul de programare C ++. Cu toate acestea, dezvoltarea unui program C ++ arată de obicei diferit de ceea ce ați văzut până acum în exemple.

clase

Până acum ați cunoscut o mare parte din vocabularul de bază al C ++ și l-ați aplicat într-un mod rudimentar. În practică, programele C ++ constau de obicei în principal în clase. Dezvoltatorii se concentrează pe crearea de clase care sunt adaptate nevoilor specifice sarcinii la îndemână. Odată ce clasele au fost create, acestea sunt utilizate ca tipuri de date pentru definirea variabilelor. Aceste variabile se numesc obiecte și sunt apoi utilizate în cadrul unui program.

După ce am creat un proiect nou, gol, cu main.cpp ca întotdeauna, creăm un fișier antet numit class.

Clasa este declarată numai în fișierul antet. Așadar, compilatorul știe că mai târziu va exista o clasă numită mașini de curse. Cuvântul cheie public înseamnă că ceea ce urmează mai jos este accesibil din exterior. Privat, pe de altă parte, înseamnă că codul de mai jos poate fi apelat numai în clasă. Există încă protejat, dar joacă doar un rol în moștenire. Pentru o clasă în sine, protejat este echivalent cu privat. În exemplu, este definită variabila întreagă kmh. Ar trebui citit din exterior folosind o metodă getter (int speed (void);). Metodele rennwagen (); și mașină de curse (int kmh); sunt cei 2 constructori ai clasei. Aici constructorul a fost suprasolicitat ca și cu funcțiile. În funcție de parametrii cu care este instanțiată clasa, compilatorul decide care dintre cele două ar trebui să fie apelat. Mașina de curse constructor (int kmh); nu numai că pornește căruciorul, ci și apasă direct pedala și accelerează la 200 km/h. Distrugătorul

mașină de curse(); este apelat atunci când instanța este distrusă cu ștergere sau programul este terminat. Cu metodele void accelerează (int kmh);, void frână (void); și viteza int (nul); se aplică aceleași reguli ca și pentru funcțiile normale. Apoi creăm fișierul klasse.cpp sub Fișiere sursă. Aici intervine codul clasei în sine.

Mai întâi este definit constructorul rennwagen: rennwagen () <>. Deoarece returnează întotdeauna un obiect (și anume el însuși), niciun tip de date nu este plasat în față. În constructor, variabila internă kmh este adresată cu cuvântul cheie this și setată la 0. Acesta este întotdeauna indicatorul către propria clasă, iar variabilele și metodele pot fi accesate în cadrul clasei. Un text este de asemenea afișat pe consolă.

Apoi este definit distructorul clasei. Îl poți recunoaște prin faptul că are exact același nume ca și constructorul, diferența fiind singura tildă

stă în față. Trebuie să fie prezent doar dacă se află și în declarația antet. Niciun tip de date nu este plasat în fața destructurului. În acest caz, variabila kmh este setată la 0.

Restul metodelor ar trebui să fie auto-explicative, sub rezerva regulilor pentru funcții.

În continuare trebuie să adaptăm main.cpp.

Aici este important să fie inclus fișierul antet klasse.h. Dacă acest lucru este uitat, compilatorul nu poate găsi clasa declarată în fișier. Când instanțiem clasa, avem acum 2 constructori disponibili. În exemplu, constructorul rennwagen () a fost numit. Aceasta începe doar coșul. Celălalt constructor, pe de altă parte, pare să fie „pe fugă” deoarece pornește motorul și accelerează direct la 199 km/h. După instanțarea clasei, avem un obiect al clasei de mașini de curse în variabila Bmw. Variabilele de clasă (numite proprietăți) și metodele sunt acum accesibile prin Bmw urmate de o perioadă (în măsura în care variabilele sau metodele sunt definite ca publice). Bmw.kmh nu este permis în afara clasei, deoarece a fost declarat privat.

Desigur, poate fi folosit și un pointer.

Moștenirea clasei

Metodele de clasă și variabilele (proprietăți) pot fi transferate (moștenite) către alte clase. În exemplul de mai sus, a fost creată mașina de curse de clasă. Aceasta include metode precum accelerate (), frână () și speed (). În principiu, aceste metode se potrivesc tuturor mașinilor și, prin urmare, clasa poate fi utilizată ca un fel de clasă de bază.
În exemplul următor vom crea o nouă clasă, caprio, care moștenește metodele de la rennwagen și are câteva caracteristici speciale.

Următorul exemplu arată cum funcționează acest lucru. Dar mai întâi trebuie creat un fișier antet numit vererbung.h și un nou fișier sursă (vererbung.cpp).

Clasa caprio este declarată cu clasa caprio. : masina de curse publica înseamnă că clasa caprio moștenește toate metodele și variabilele (proprietățile) din clasa mașinilor de curse. Condiția prealabilă este, desigur, ca metodele și variabilele (proprietățile) care sunt în mașinile de curse și care urmează să fie utilizate în caprio să fie publice sau protejate. În clasa caprio în sine, declarăm cei 2 constructori și metoda verdeck () într-un fișier CPP.
Constructorul caprio (int kmh) este interesant. Anterior, la clasa de mașini de curse, am suprasolicitat și constructorul normal cu mașini de curse (int kmh). Deci, ar fi un avantaj dacă constructorul caprio (int kmh) supraîncărcat este chemat astfel încât să nu fie încărcat constructorul părinte standard, ci părintele (int kmh). Pentru ca așa ceva să fie posibil, constructorul corespunzător trebuie definit în fișierul antet: caprio (int kmh): mașină de curse (kmh)
Constructorul clasei părinte care urmează să fie apelat, inclusiv parametrii necesari, este notat pur și simplu după colon și în fața corpului funcției.

În vererbung.cpp este definită doar metoda verdeck (), altfel avem doar constructori și aceștia sunt deja definiți.

Deoarece acum avem o nouă clasă, trebuie, bineînțeles, să schimbăm și codul main.cpp.

Atunci când noua clasă este instanțiată, constructorul părinte al mașinilor de curse este întotdeauna executat mai întâi, deoarece clasa caprio este derivată din aceasta. Apoi se numește constructorul caprio, care la rândul său numește metoda verdeck ().

Apel metoda înlănțuit

Cuvântul cheie acesta este indicatorul propriu al clasei. Acest indicator poate fi definit și ca un tip de returnare. Aceasta înseamnă că metodele pot fi numite direct legate. Iată un exemplu autonom care nu are nicio legătură cu restul paginii:

Cu clasa de definiție & rCall (); propriul obiect este returnat. Dacă o metodă returnează propriul obiect, o altă metodă poate fi accesată direct prin operatorul de selecție a componentelor (în acest caz perioada.). Cu toate acestea, metodele trebuie definite ca fiind publice.

Cu clasa de definiție * pCall (); se returnează și propriul obiect, dar ca un indicator. O altă metodă poate fi accesată și direct prin operatorul de selecție a componentelor (în acest caz săgeata liniuță ->). De asemenea, metodele trebuie să fie din nou publice. Personal, cred că varianta -> este mai drăguță, deoarece dezvoltasem PHP cu 10 ani înainte.:)