Documente Academic
Documente Profesional
Documente Cultură
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
Obiecte
n
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(); }
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
Constructor Definiie
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
11
Exemplu:Clasa Complex
class Complex { private: float re; float im; public: Complex(float r, float i); void citire(); void afisare(); float modul(); };
12
Exemplu:Clasa Complex
Complex::Complex(float r, float i){ re = r; im = i; } void main(){ Complex z(7,3); z.afisare(); }
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
13
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
14
16
Constructori cu parametri
cu
17
19
Output
2+3*i 4+0*i 5+0*i 0+0*i
18
20
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;)
21
23
Constructori de copiere - Sintaxa class IdNumeClasa { ... IdNumeClasa (IdNumeClasa &ob); sau IdNumeClasa (const IdNumeClasa &ob); ... };
Iniializarea i distrugerea obiectelor 22
Output
2+3*i Apel constructor de copiere 2+3*i Apel constructor de copiere Iniializarea i distrugerea obiectelor 24
Destructor Sintax
class IdNumeClasa { ... ~IdNumeClasa (); ... }; IdNumeClasa::~IdNumeClasa (){ //instructiuni }
25 Iniializarea i distrugerea obiectelor 27
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
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.
29
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
30