Crearea unui designer simplu

Lecția 23. Constructorul și distrugătorul

Când creați obiecte, una dintre cele mai utilizate operații pe care le veți efectua în programele dvs. este inițializarea elementelor de date obiect. După cum ați învățat în Lecția 22, singurul mod în care puteți accesa elementele de date private este de a utiliza funcții de clasă. Pentru a simplifica procesul de inițializare a elementelor de date ale unei clase, C ++ utilizează o funcție specială numită constructor, care este lansată pentru fiecare obiect pe care îl creați. De asemenea, C ++ oferă o funcție numită destructor care începe atunci când obiectul este distrus. În această lecție, designerul și distrugătorul sunt discutate mai detaliat. Până la sfârșitul acestei lecții, veți învăța următoarele concepte de bază:







Un constructor este o metodă de clasă care ușurează programele dvs. să iniționeze elementele de date ale unei clase.

Constructorul are același nume ca și clasa.

Constructorul nu are o valoare de returnare.

De fiecare dată când programul dvs. creează o variabilă de clasă, C ++ apelează constructorul de clasă dacă există constructorul.

Multe obiecte pot aloca memorie pentru stocarea informațiilor; atunci când distrugeți un astfel de obiect, C ++ va apela un distrugător special, care poate elibera această memorie prin eliminarea după obiect.

Distrugătorul are același nume ca și clasa, cu excepția faptului că trebuie să îi precede numele cu o tildă (

Distrugătorul nu are o valoare de returnare.

Termenii de designer și distrugător nu ar trebui să vă sperie. În schimb, imaginați-vă constructorul ca o funcție care vă ajută să construiți (construiți) un obiect. În mod similar, un distrugător este o funcție care vă ajută să distrugeți un obiect. Un distructor este de obicei folosit dacă, atunci când distrugeți un obiect, este necesar să eliberați memoria pe care obiectul o ocupă.

Un constructor este o metodă a unei clase care are același nume ca și clasa. De exemplu, dacă folosiți o clasă numită angajat, constructorul va avea și numele angajatului. În mod similar, pentru o clasă numită câini, constructorul va avea numele de câini. Dacă programul dvs. definește un constructor, C ++ îl va suna automat de fiecare dată când creați un obiect. Următorul program CONSTRUC.CPP creează o clasă numită angajat. De asemenea, programul definește un constructor numit angajat care atribuie valorile inițiale obiectului. Cu toate acestea, constructorul nu returnează nicio valoare, în ciuda faptului că nu este declarată ca fiind nulă. În schimb, pur și simplu nu specificați tipul de returnare:







În programul dvs., pur și simplu definiți constructorul în același mod ca orice altă metodă de clasă:

angajat :: angajat (char * nume, angajat long_id, salariu float)

După cum puteți vedea, constructorul nu returnează valoarea funcției chemate. De asemenea, nu utilizează tipul gol. În acest caz, constructorul utilizează operatorul de permisiune globală și numele clasei înainte de numele fiecărui element, așa cum sa discutat în lecția 23. Mai jos este implementarea programului CONSTRUC.CPP:

angajat :: angajat (char * nume, angajat long_id, salariu float)

angajat angajat ("Happy Jamsa", 101, 10101.0);

Dacă programul dvs. are nevoie să creeze mai multe obiecte angajate, puteți inițializa elementele fiecăruia folosind constructorul, după cum se arată mai jos:

angajat angajat ("Happy Jamsa", 101, 10101.0);

directorul de salariați ("Jane Doe", 1022, 30000.0);

Vizualizarea designerului

Un constructor este o funcție specială pe care C ++ o apelează automat de fiecare dată când este creat un obiect. Obiectivul obișnuit al constructorului este de a inițializa elementele de date ale obiectului. Constructorul are același nume ca și clasa. De exemplu, un fișier denumit clasă utilizează un fișier numit constructor. Definiți constructorul în cadrul programului dvs. în același mod ca orice metodă de clasă. Singura diferență este că constructorul nu are o valoare de returnare. Când declarați mai târziu un obiect, puteți trece parametrii constructorului, după cum se arată mai jos:

object_name_class_name (valuel, valoare2, valoare3)

Constructorii și parametrii impliciți

După cum știți deja din Lecția 15, C ++ vă permite să specificați valorile implicite pentru parametrii funcției. Dacă utilizatorul nu specifică parametri, funcția va utiliza valorile implicite. Constructorul nu face excepție; Programul dvs. poate specifica valorile implicite pentru acesta în același mod ca și pentru orice altă funcție. De exemplu, următorul constructor de angajați utilizează o valoare salarială implicită de 10000.0 dacă programul nu specifică un salariu atunci când creați obiectul. Cu toate acestea, programul trebuie să specifice numele și numărul angajatului:

angajat :: angajat (char * name, long employee_id, salariu float = 10000.00)

După cum știți deja din lecția 13, C ++ vă permite programelor să suprasoliciteze definițiile funcțiilor, indicând funcții alternative pentru alte tipuri de parametri. De asemenea, C ++ vă permite să supraîncărcați constructorii. Următorul program CONSOVER.CPP supraîncărcă angajatul constructorului. Primul constructor cere programului să specifice numele angajatului, numărul angajatului și salariul. Cel de-al doilea constructor cere utilizatorului să introducă salariul necesar, dacă programul nu specifică:

angajat :: angajat (char * name, long employee_id)

În cadrul definiției clasei, programul trebuie să specifice prototipurile pentru ambii constructori, după cum se arată mai jos:

Mai jos este implementarea programului CONSOVER.CPP:

angajat :: angajat (char * nume, angajat long_id, salariu float)

angajat :: angajat (char * name, long employee_id)

Dacă compilați și rulați acest program, vi se va cere să introduceți un salariu pentru Jane Doe. Când introduceți salariul, programul afișează informații despre ambii angajați.







Articole similare

Trimiteți-le prietenilor: