Sunteți pe pagina 1din 9

Clase și obiecte.

Constructori și destructor pentru


clasă

lect. univ. magistru Lisnic Inga, DISA,FCIM,UTM

Chişinău 2020
Definiţia clasei

O clasă este un tip de date definit de utilizator. O declarare a unei clase defineşte un tip nou care reuneşte
date şi funcţii. Acest tip nou poate fi folosit pentru a declara obiecte de acest tip. Deci, un obiect este un
exemplar (instanţa) a unei clase.
Corpul clasei conţine definiţii de date membre ale clasei şi definiţii sau declaraţii (prototipuri) de funcţii
membre ale clasei, despărţite prin unul sau mai mulţi specificatori de acces.
Un specificator de acces poate fi unul din cuvintele cheie din C++:
 public:
 private:
 protected:
Specificatorii private şi protected asigura o protecţie de acces la datele sau funcţiile membre ale clasei
respective, iar specificatorul public permite accesul la acestea şi din afara clasei. Efectul unui specificator
de acces durează până la următorul specificator de acces. Implicit, daca nu se declara nici un specificator
de acces, datele sau funcţiile membre sunt de tip private
Pentru definirea unei funcţii în afara clasei (dar, bineînţeles în domeniul ei de definiţie) numele funcţiei
trebuie sa fie însoţit de numele clasei respective prin intermediul operatorului de rezoluţie (::).
În domeniul de definiţie al unei clase se pot crea obiecte ale clasei. Fiecare obiect conţine câte o copie
individuala a fiecărei variabile a clasei respective şi pentru fiecare obiect se poate apela orice fel de
funcţie membra publica a clasei. Accesul la datele membre publice sau apelul funcţiilor membre publice
ale unui obiect se poate face folosind un operator de selecţie membru: operatorul punct (.) daca se
cunoaşte obiectul, sau operatorul -> daca se cunoaşte pointerul la obiect.
Forma generală de declaraţie a
unei clase este următoarea:
Constructori

Un constructor este o funcţie cu acelaşi nume cu numele clasei, care nu returnează nici o valoare
(mai mult, nu are specificat tipul returnat) şi care iniţializează datele membre ale clasei. Un
constructor este apelat ori de câte ori este creat un obiect dintr-o clasa care are un constructor (definit
sau generat de compilator).
Un obiect poate fi creat în următoarele moduri:
 ca variabila globala;
 ca variabila locala;
 prin utilizarea explicita a operatorului new ;
 ca obiect temporar.
Urmatoarele sublinieri sunt necesare:
 un constructor poarta numele clasei careia îi apartine
 constructorii nu pot returna valori. În plus, prin conventie, nici la declararea şi nici la definirea
lor nu poate fi specificat tipul "void" ca tip returnat.
 adresa constructorilor nu este accesibila programatorului.: nu se poate folosi &X::X().
 constructorii sunt apelati implicit ori de câte ori este nevoie.
 în cazul în care o clasa nu are nici un constructor declarat de programator, compilatorul va
genera implicit unul. Acesta va fi public, fara nici un parametru, şi va avea o lista vida de
instructiuni.
Tipuri de constructori
Ordinea constructorilor şi destructorilor

Constructorii sunt lansati in ordinea declararii obiectelor iar destructorii in ordine inversa.
#include <iostream.h>
class ContBancar
Destructor

Ce este distructorul?
Destructor este o funcție membru care distruge sau șterge un obiect.
Când se numește distructor?
O funcție de distrugere este apelată automat atunci când obiectul iese din sfera de aplicare:
1. funcția se termină
2. programul se termină
3. un bloc care conține variabile locale se termină
4. un operator de ștergere se numește 
Distructorii sunt diferiți de o normală functie de membru?
Distructorii au același nume ca clasa precedată de o tildă (~)
Distructorii nu iau niciun argument și nu returnează nimic
Pot exista mai mulți distructori într-o clasă?
Nu, nu poate exista decât un singur destructor într-o clasă cu nume de clasă precedat de ~, fără parametri și fără tip de
returnare.
Când trebuie să scriem un destructor definit de utilizator?
Dacă nu scriem propriul nostru destructor în clasă, compilatorul creează un destructor implicit pentru noi. Distructorul
implicit funcționează bine, cu excepția cazului în care am alocat dinamic memorie sau indicator în clasă. Când o clasă
conține un pointer către memoria alocată în clasă, ar trebui să scriem un destructor pentru a elibera memoria înainte ca
instanța clasei să fie distrusă. Acest lucru trebuie făcut pentru a evita scurgerile de memorie.
Poate un destructor să fie virtual?
Da, De fapt, este întotdeauna o idee bună să facem distructorii virtuali în clasa de bază atunci când avem o funcție
virtuală.
Probleme propuse:

1. Să se implementeze o clasa care sa retina revistele si cartile dintro biblioteca. Pentru


aceasta se va folosi o lista simplu inlantuita ale carei elemente sunt revistele si/sau cartile
din biblioteca

S-ar putea să vă placă și