Sunteți pe pagina 1din 8

Protecia datelor i funciilor membre

Clase i obiecte. Iniializarea i distrugerea obiectelor


Mihai Gabroveanu

private datele i funciile aflate sub influena acestui modificator NU pot fi accesate din afara clasei. n mod implicit datele i funciile sunt private. protected - datele i funciile aflate sub influena acestui modificator nu pot fi accesate din afara clasei, cu excepia claselor derivate public datele i funciile aflate sub influena modificatorului public, pot fi accesate n afara clasei
Iniializarea i distrugerea obiectelor 3

Sintaxa definirii unei clase


class IdNumeClasa { [<IdProptecie>:] <ListaMembrii> [<IdProptecie>:] <ListaMembrii> [<IdProptecie>:] <ListaMembrii> }; unde: <IdProptectie>:=private| protected | public <ListaMembrii>:=<ListaDateMembre><ListaFunctiiMembre>
Iniializarea i distrugerea obiectelor 2

Obiecte
n

Obiectul reprezint o instan a unei clase. n Sintaxa declarrii unui obiect


IdNumeClas idOb1, , idObN;

Accesarea datelor i funciilor membre


idOb.idDataMembru idPointerOb ->idDataMembru idOb.idMetodaMembru(lista de parametri); idPointerOb ->idMetodaMembru(lista de parametri);

Iniializarea i distrugerea obiectelor

Exemplu:Clasa Complex
class Complex { private: float re; float im; public: void citire(); void afisare(); float modul(); };

Exemplu:Clasa Complex
int main(){ Complex z; z.re = 2.5; // Incorect deoarece re este private z.citire(); Complex *p=&z; p -> afisare(); }

Iniializarea i distrugerea obiectelor

Iniializarea i distrugerea obiectelor

Exemplu:Clasa Complex
void Complex::citire(){ printf("Dati partea reala:");scanf("%f",&re); printf("Dati partea imaginara:");scanf("%f",&im); } void Complex::afisare(){ printf("%g+%g*i", re, im); } float Complex::modul(){ return sqrt(re*re + im*im); }

Iniializarea Obiectelor
n

n cazul datelor de tipuri predefinite, este posibil iniializarea acestora la momentul declarrii. Exemplu: int x=10; float a[2]={3,8}; n cazul obiectelor, iniializarea la declarare se face prin intermediul unor funcii speciale numite constructori.
Iniializarea i distrugerea obiectelor 8

Iniializarea i distrugerea obiectelor

Constructor Definiie
n

Constructor Sintax (II)


n

Constructorul este o funcie membr special a unei clase ce se apeleaz n mod automat la crearea unui obiect n Rol:
alocare iniializare

Iniializarea obiectelor IdNumeClasa idObiect(<listaParametri>); sau IdNumeClasa idObiect = valParam; in cazul in care lista de parametri e formata dintr-un singur parametru

Iniializarea i distrugerea obiectelor

Iniializarea i distrugerea obiectelor

11

Constructor Sintax (I)


class IdNumeClasa { ... IdNumeClasa (<listaParametri>); ... }; IdNumeClasa::IdNumeClasa (<listaParametri>){ //instructiuni }
Iniializarea i distrugerea obiectelor 10

Exemplu:Clasa Complex
class Complex { private: float re; float im; public: Complex(float r, float i); void citire(); void afisare(); float modul(); };

Iniializarea i distrugerea obiectelor

12

Exemplu:Clasa Complex
Complex::Complex(float r, float i){ re = r; im = i; } void main(){ Complex z(7,3); z.afisare(); }

Tipuri de constructori (I)


n

Constructori implicii
de utilizator constructor ce nu are niciun parametru generat de compilator daca o clas nu are niciun constructor definit atunci compilatorul genereaz unul automat, far parametri al crui corp nu conine nicio instruciune constructor cu toi parametri implicii
definit

Iniializarea i distrugerea obiectelor

13

Iniializarea i distrugerea obiectelor

15

Constructori - Caracteristici
n n n
n

Exemplu:Constructor Implicit
class Complex { public: Complex(){ re = 0; im = 0; printf (Apel constructor\n); } }; Complex z; z.afisare();

n n

au acelai nume cu cel al clasei din care fac parte nu returneaz nimic (nici macar tipul void) o clas poate avea mai muli constructori nu pot primi ca parametri instane ale clasei ce se definete, ci doar pointeri sau referine la instanele clasei respective. constructorii nu sunt apelai explicit (in general). constructorii nu se motenesc constructori nu pot fi funcii virtuale

Output
Apel constructor 0+0*i

Iniializarea i distrugerea obiectelor

14

Iniializarea i distrugerea obiectelor

16

Tipuri de constructori (II)


n

Exemplu: Constructor cu parametri


class Persoana { private: char *nume; int varsta; public: Persoana(char *n, int v){ nume = new char[strlen(n)+1]; strcpy(nume, n); varsta = v; } void afisare(){ cout<<"Nume:"<<nume<<endl; cout<<"Varsta:"<<varsta<<endl; } }; void setNume(char *n){ if(strlen(nume)<strlen(n)){ delete nume; nume = new char[strlen(n)+1]; } strcpy(nume, n); } void setVarsta(int v){ varsta = v; }

Constructori cu parametri
cu

parametri ce nu iau valori implicite cu parametri ce iau valori implicite


n

Funcii cu parametri implicii


tip_r nume_funcie(tip1 p1, ..., tipn pn, tipn+1 pn+1=vin+1,..., tipm pm=vim); pn+1, , pm = parametri implicii. La apelul funiei acetia pot sa lipseasc, caz n care ei au valorile implicite specificate de declarare.

Iniializarea i distrugerea obiectelor

17

Iniializarea i distrugerea obiectelor

19

Exemplu:Constructor cu parametri implicii


class Complex { public: Complex(float r = 0, float i = 0){ re = r; im = i; } }; Complex z1(2,3), z2(4), z3=5, z4; z.afisare();

Exemplu: Constructor cu parametri (cont)


Output
int main(){ Persoana p1("Mihai",21); Persoana p2=p1; p1.afisare(); p2.afisare(); p2.setNume("Misu"); p2.setVarsta(24); p1.afisare(); p2.afisare(); getch(); } Nume:Mihai Varsta:21 Nume:Mihai Varsta:21 Nume:Misu Varsta:21 Nume:Misu Varsta:24

Output
2+3*i 4+0*i 5+0*i 0+0*i

Iniializarea i distrugerea obiectelor

18

Iniializarea i distrugerea obiectelor

20

Tipuri de constructori (III)


n

Constructori de copiere - Utilizare


n n

Constructori de copiere - iniializarea obiectelor din altele deja existente.


de utilizator generai de compilator
definii

Crearea de obiecte cu iniializare, pornind de la un obiect care exist (IdClasa ob2=ob1). Apelul unei funcii care lucreaz cu obiecte transferate prin valoare, cnd este nevoie de crearea unei copii a obiectului pe stiv (cazul f(ob);). Returnarea dintr-o funcie a unui obiect prin valoare (return ob;)

Iniializarea i distrugerea obiectelor

21

Iniializarea i distrugerea obiectelor

23

Constructori de copiere - Sintaxa class IdNumeClasa { ... IdNumeClasa (IdNumeClasa &ob); sau IdNumeClasa (const IdNumeClasa &ob); ... };
Iniializarea i distrugerea obiectelor 22

Exemplu:Constructor de copiere (I)


class Complex { public: Complex(const Complex &z){ re = z.re; im = z.im; printf("Apel constructor de copiere\n") ; } }; void f(Complex z){ ... } Complex z1(2,3); z1.afisare(); Complex z2 = z1; z2.afisare(); f(z1);

Output
2+3*i Apel constructor de copiere 2+3*i Apel constructor de copiere Iniializarea i distrugerea obiectelor 24

Exemplu:Constructor de copiere (II)


class Persoana { . . . Persoana(const Persoana &p){ nume = new char[strlen(p.nume)+1]; strcpy(nume, p.nume); varsta = p.varsta; cout<<"Apel constructor de copiere\n"; } }; int main(){ Persoana p1("Mihai",21); Persoana p2=p1; p1.afisare(); p2.afisare(); p2.setNume("Misu"); p2.setVarsta(24); p1.afisare(); p2.afisare(); } Apel constructor cu parametri Apel constructor de copiere Nume:Mihai Varsta:21 Nume:Mihai Varsta:21 Nume:Mihai Varsta:21 Nume:Misu Varsta:24

Destructor Sintax
class IdNumeClasa { ... ~IdNumeClasa (); ... }; IdNumeClasa::~IdNumeClasa (){ //instructiuni }
25 Iniializarea i distrugerea obiectelor 27

Iniializarea i distrugerea obiectelor

Destructori
Destructorul este o funcie membr special a unei clase ce apeleaz n mod automat distrugerea unui obiect n Rol: eliberarea zonelor alocate dinamic, resurselor, etc. n Tipuri
n
Definit

Exemplu:Destructor (I)
class Complex { public: void ~Complex(){ printf(Distrugere obiect:); afisare(); } }; void main(){ Complex z1(2,3), z2(4,7); z1.afisare(); z2.afisare(); }

Output
2+3*i 4+7*i Distrugere obiect: 4+7*i Distrugere obiect: 2+3*i

de utilizator Generat de compilator


Iniializarea i distrugerea obiectelor 26

Iniializarea i distrugerea obiectelor

28

Exemplu:Destructor (II)
class Persoana { ... ~Persoana(){ cout<<"Distrug obiectul:"<<nume<<endl; delete nume; } }; int main(){ Persoana p1("Mihai",21); Persoana p2=p1; p1.afisare(); p2.afisare(); p2.setNume("Misu"); p2.setVarsta(24); p1.afisare(); p2.afisare(); } Apel constructor cu parametri Apel constructor de copiere Nume:Mihai Varsta:21 Nume:Mihai Varsta:21 Nume:Mihai Varsta:21 Nume:Misu Varsta:24 Distrug obiectul:Misu Distrug obiectul:Mihai

Tem
n

Implementai clasa NumarRaional. n Implemntai clasa Carte. n Implemntai clasa Student n care numele se va aloca dinamic.

Iniializarea i distrugerea obiectelor

29

Iniializarea i distrugerea obiectelor

31

Destructori - Caracteristici
n

Are acelai nume cu numele clasei si este precedat de ~ n Nu are parametri n Nu returneaza nimic (nici macar void) n O clasa poate avea un singur destructor n Pot fi functii virtuale

Iniializarea i distrugerea obiectelor

30

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