Sunteți pe pagina 1din 8

Protecția datelor și funcțiilor membre

Clase și obiecte. n private – datele şi funcţiile aflate sub influenţa


acestui modificator NU pot fi accesate din afara
Inițializarea și distrugerea clasei. În mod implicit datele și funcțiile sunt private.
obiectelor n protected - datele şi funcţiile aflate sub influenţa
acestui modificator nu pot fi accesate din afara
Mihai Gabroveanu clasei, cu excepția claselor derivate
n public – datele și funcțiile aflate sub influența
modificatorului public, pot fi accesate în afara clasei

Inițializarea și distrugerea obiectelor 3

Sintaxa definirii unei clase Obiecte


class IdNumeClasa { n Obiectul reprezintă o instanță a unei clase.
[<IdProptecție>:] <ListaMembrii>
n Sintaxa declarării unui obiect
[<IdProptecție>:] <ListaMembrii>
IdNumeClasă idOb1, …, idObN;

[<IdProptecție>:] <ListaMembrii> n Accesarea datelor și funcțiilor membre
idOb.idDataMembru
};
idPointerOb ->idDataMembru
unde:
idOb.idMetodaMembru(lista de parametri);
<IdProptectie>:=private| protected | public
idPointerOb ->idMetodaMembru(lista de parametri);
<ListaMembrii>:=<ListaDateMembre><ListaFunctiiMembre>

Inițializarea și distrugerea obiectelor 2 Inițializarea și distrugerea obiectelor 4


Exemplu:Clasa Complex Exemplu:Clasa Complex

class Complex {
int main(){
private:
Complex z;
float re;
z.re = 2.5; // Incorect deoarece re este private
float im;
z.citire();
public:
Complex *p=&z;
void citire();
p -> afisare();
void afisare();
}
float modul();
};

Inițializarea și distrugerea obiectelor 5 Inițializarea și distrugerea obiectelor 7

Exemplu:Clasa Complex Inițializarea Obiectelor


n În cazul datelor de tipuri predefinite, este posibilă
void Complex::citire(){
printf("Dati partea reala:");scanf("%f",&re); inițializarea acestora la momentul declarării.
printf("Dati partea imaginara:");scanf("%f",&im);
} Exemplu:
void Complex::afisare(){
printf("%g+%g*i", re, im); int x=10;
}
float Complex::modul(){ float a[2]={3,8};
return sqrt(re*re + im*im);
} n În cazul obiectelor, inițializarea la declarare se face
prin intermediul unor funcții speciale numite
constructori.

Inițializarea și distrugerea obiectelor 6 Inițializarea și distrugerea obiectelor 8


Constructor – Definiție Constructor – Sintaxă (II)
n Constructorul este o funcție membră n Inițializarea obiectelor
specială a unei clase ce se apelează în mod
automat la crearea unui obiect IdNumeClasa idObiect(<listaParametri>);
n Rol: sau
¨ alocare IdNumeClasa idObiect = valParam;
¨ inițializare in cazul in care lista de parametri e formata dintr-un
singur parametru

Inițializarea și distrugerea obiectelor 9 Inițializarea și distrugerea obiectelor 11

Constructor – Sintaxă (I) Exemplu:Clasa Complex


class IdNumeClasa { class Complex {
... private:
float re;
IdNumeClasa (<listaParametri>); float im;
... public:
Complex(float r, float i);
}; void citire();
void afisare();
IdNumeClasa::IdNumeClasa (<listaParametri>){ float modul();
//instructiuni };

Inițializarea și distrugerea obiectelor 10 Inițializarea și distrugerea obiectelor 12


Exemplu:Clasa Complex Tipuri de constructori (I)

Complex::Complex(float r, float i){


n Constructori impliciți
re = r; ¨ definitde utilizator – constructor ce nu are niciun
im = i;
} parametru
void main(){ ¨ generat de compilator – daca o clasă nu are niciun
Complex z(7,3);
z.afisare(); constructor definit atunci compilatorul generează
}
unul automat, fară parametri al cărui corp nu
conține nicio instrucțiune
¨ constructor cu toți parametri impliciți

Inițializarea și distrugerea obiectelor 13 Inițializarea și distrugerea obiectelor 15

Constructori - Caracteristici Exemplu:Constructor Implicit


class Complex {

public:
n au același nume cu cel al clasei din care fac parte Complex(){

nu returnează nimic (nici macar tipul void)


re = 0;
n im = 0;
printf (“Apel constructor\n”);
n o clasă poate avea mai mulți constructori …
}

n nu pot primi ca parametri instanțe ale clasei ce se };



definește, ci doar pointeri sau referințe la instanțele Complex z;
z.afisare();
clasei respective. …

n constructorii nu sunt apelaţi explicit (in general). Output


n constructorii nu se moștenesc Apel constructor
0+0*i
n constructori nu pot fi funcții virtuale

Inițializarea și distrugerea obiectelor 14 Inițializarea și distrugerea obiectelor 16


Tipuri de constructori (II) Exemplu: Constructor cu parametri

n Constructori cu parametri class Persoana {


private:
void setNume(char *n){
if(strlen(nume)<strlen(n)){
char *nume; delete nume;
¨ cu parametri ce nu iau valori implicite int varsta; nume = new char[strlen(n)+1];
public: }
¨ cu parametri ce iau valori implicite Persoana(char *n, int v){ strcpy(nume, n);
nume = new char[strlen(n)+1]; }
n Funcții cu parametri impliciți strcpy(nume, n);
varsta = v;
void setVarsta(int v){
varsta = v;
tip_r nume_funcție(tip1 p1, ..., tipn pn, tipn+1 pn+1=vin+1,..., tipm pm=vim); } }

void afisare(){ };
pn+1, …, pm = parametri impliciți. cout<<"Nume:"<<nume<<endl;
cout<<"Varsta:"<<varsta<<endl;
La apelul funției aceștia pot sa lipsească, caz în care ei au valorile implicite }
specificate de declarare.

Inițializarea și distrugerea obiectelor 17 Inițializarea și distrugerea obiectelor 19

Exemplu:Constructor cu parametri impliciți


Exemplu: Constructor cu parametri
class Complex {
(cont)

public:
Complex(float r = 0, float i = 0){ Output
re = r;
im = i; int main(){
} Persoana p1("Mihai",21); Nume:Mihai
… Persoana p2=p1; Varsta:21
}; p1.afisare(); Nume:Mihai
… p2.afisare(); Varsta:21
Complex z1(2,3), z2(4), z3=5, z4;
z.afisare();
p2.setNume("Misu");
… p2.setVarsta(24); Nume:Misu
p1.afisare(); Varsta:21
p2.afisare(); Nume:Misu
Output getch(); Varsta:24
}
2+3*i
4+0*i
5+0*i
0+0*i

Inițializarea și distrugerea obiectelor 18 Inițializarea și distrugerea obiectelor 20


Tipuri de constructori (III) Constructori de copiere - Utilizare

n Constructori de copiere - iniţializarea n Crearea de obiecte cu iniţializare, pornind de la un


obiect care există (IdClasa ob2=ob1).
obiectelor din altele deja existente.
n Apelul unei funcţii care lucrează cu obiecte
¨ definiți
de utilizator transferate prin valoare, când este nevoie de crearea
¨ generați de compilator unei copii a obiectului pe stivă (cazul f(ob);).
n Returnarea dintr-o funcţie a unui obiect prin valoare
(return ob;)

Inițializarea și distrugerea obiectelor 21 Inițializarea și distrugerea obiectelor 23

Constructori de copiere - Sintaxa Exemplu:Constructor de copiere (I)


class Complex {

public:

class IdNumeClasa { Complex(const Complex &z){


re = z.re;
im = z.im;

... …
}
printf("Apel constructor de copiere\n") ;

IdNumeClasa (IdNumeClasa &ob);


};
void f(Complex z){
...

sau
}

Complex z1(2,3);
z1.afisare();

IdNumeClasa (const IdNumeClasa &ob); Complex z2 = z1;


z2.afisare();
f(z1);

... Output
}; 2+3*i
Apel constructor de copiere
2+3*i
Apel constructor de copiere

Inițializarea și distrugerea obiectelor 22 Inițializarea și distrugerea obiectelor 24


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

Inițializarea și distrugerea obiectelor 25 Inițializarea și distrugerea obiectelor 27

Destructori Exemplu:Destructor (I)


class Complex {

public:
n Destructorul este o funcție membră specială void ~Complex(){
printf(“Distrugere obiect:”);
a unei clase ce apelează în mod automat }
afisare();

distrugerea unui obiect };


n Rol: eliberarea zonelor alocate dinamic, void main(){


Complex z1(2,3), z2(4,7);
z1.afisare();
resurselor, etc. z2.afisare();
}

n Tipuri Output
2+3*i
¨ Definit
de utilizator 4+7*i
Distrugere obiect: 4+7*i
Distrugere obiect: 2+3*i
¨ Generat de compilator

Inițializarea și distrugerea obiectelor 26 Inițializarea și distrugerea obiectelor 28


Exemplu:Destructor (II) Temă
class Persoana {
...
int main(){
Persoana p1("Mihai",21);
Apel constructor cu parametri
Apel constructor de copiere
n Implementați clasa NumarRațional.
~Persoana(){ Persoana p2=p1; Nume:Mihai
cout<<"Distrug
obiectul:"<<nume<<endl;
p1.afisare();
p2.afisare();
Varsta:21
Nume:Mihai
n Implemntați clasa Carte.
delete nume; p2.setNume("Misu"); Varsta:21
} p2.setVarsta(24);
p1.afisare();
Nume:Mihai
Varsta:21
n Implemntați clasa Student în care numele se
}; p2.afisare(); Nume:Misu
} Varsta:24
Distrug obiectul:Misu
va aloca dinamic.
Distrug obiectul:Mihai

Inițializarea și distrugerea obiectelor 29 Inițializarea și distrugerea obiectelor 31

Destructori - Caracteristici
n Are același 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

Inițializarea și distrugerea obiectelor 30

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