Documente Academic
Documente Profesional
Documente Cultură
CURS 3 PROGRAMARE II
CURS ANTERIOR
Tipuri de date ncapsularea Type checking Clase
CUPRINS
Clase Specificatori de acces Contructorii Destructorii Constructor de copiere
OBIECTE
Obiectele sunt entiti create la execuie (run-time), de baz ale unui sistem orientat obiect Fiecare obiect are asociate date i funcii care definesc operaiile care au sens asupra obiectului Este o entitate care exist n lumea real
Operaie
OBIECTE
careEsteTipulCursului()
modificareDate()
afiareInformaii()
adaugareStudent()
CLASE
Caracterizeaz o colecie de obiecte similare
Clasa
CLASE DEFINIRE
Sintax class numeClas {
DATE MEMBRE;//informaii
FUNCII MEMBRE;//comportament
} listDeVariabile;
CLASE
Clasa: Curs ----------------------------------------------------Atribute: ID_curs nume listaStudeni numarCredite tipExamen ----------------------------------------------------Funcii: afisareInformaii() adaugareStudent() careEsteTipulCursului() modificareCredite()
EXEMPLU CLASE
#ifndef CURS_H #define CURS_H class Curs { void afisareInformatii(); void adaugareStudenti(Student *);
FUNCII MEMBRE
#endif // CURS_H
SPECIFICATORI DE ACCES
Vizibilitatea datelor i funciilor membre public
Accesate de funciile membre ale clasei i toate funciile nemembre ale programului
private
Accesate doar de funciile membre sau prietene clasei
protected
Asemntor cu privat, dar permite accesul claselor derivate la datele i funciile membre
default
Toate clasele definite ntr-o clas sunt private
EXEMPLU CLASE
#ifndef CURS_H #define CURS_H class Curs { void afisareInformatii(); void adaugareStudenti(Student *);
#endif // CURS_H
EXEMPLU CLASE
class Curs { public: void afisareInformatii();
VIZIBILITATE PUBLIC
VIZIBILITATE PROTEJAT
VIZIBILITATE PRIVAT
char *ID_curs;
char *nume; int numarCredite; };
OBERVAII
Datele membru ale unei clase ar trebuie s fie declarate ca private Funciile membre ar trebui s fie declarate publice
Cu excepia funciilor membre care sunt accesate de alte funcii membre ale aceleai clase
Este util s existe funcii set i get
OBIECTE
Instanierea obiectelor Crearea unui obiect de un anumit tip Sintax
numeClasa numeObiect;
Exemplu Curs c;
OBIECTE
Exemplu Curs p2; Curs algo; Curs var;
Accesare Date
void afisareInformatii();
void adaugareStudenti(Student *); char * careEsteTipulCursului (); void modificareCredite (int); char *tipExamen; private: Student *listaStudenti; char *ID_curs;
alg.tipExamen;
p2->tipExamen; tab[1].tipExamen;
Accesare Functii
alg.modificareCredite(4);
p2->alg.modificareCredite(4); tab[1].modificareCredite(4); }
char *nume;
int numarCredite; };
CONSTRUCTORI
Constructor Funcie utilizat pentru a iniializa instanele (obiectele) unei clase Caracteristici Funcia are acelai nume cu clasa Nu are tip de return (nici mcar void) Nu poate fi funcie virtual Pointeri nu pot fi atribuii constructorului
CONSTRUCTORI
O clas poate avea unul sau mai muli constructori Cu numr diferit de parametrii Constructorul implicit (default) nu are parametri Procesul de creare al unui obiect Alocarea memoriei Gsirea constructorului corespunztor Apelarea constructorului pentru a iniializa starea obiectului, membri clasei au fost anterior construii/iniializai
CONSTRUCRORI
class Curs { public: Curs(char *nume);
Care ar fi o soluie?
CONSTRUCRORI
class Curs { public: Curs(char *nume);
Prototip: X()
Dac nu exist nici un constructor definit ntr-o clas, compilatorul genereaz un constructor implicit, care realizeaz apeluri implicite pentru datele membru ale clasei Dac o clas are membri const sau referin atunci constructorul implicit nu mai este generat automat, deoarece membri const i referin trebuie iniializai
class Data { public: // constructor implicit Data(int zi=0, int luna=0, int an=0); }; class String { public: String(); // constructor implicit }; class Student { Data ziNastere; String nume; // constructor implicit generat automat care apeleaz constructorii claselor Data i String };
class Data { public: // nu se genereaz constructor implicit Data(int day); }; class Test { const int a; int& r; // nu se genereaz constructor implicit };
CONSTRUCTOR DE COPIERE
Constructor cu un argument care este o referin la clasa proprie Sintax X (const X&obj); Este apelat La declararea obiectelor precum X obj = obiect_surs Cnd se transmit argumente funciilor foo(X) Cnd se creeaz un obiect temporar n timpul evaluri unei expresii Dac nu este definit pentru o clas, compilatorul genereaz automat unul care copie bit-cu-bit coninutul obiectului surs n obiectul destinaie
Pentru a evita copierea unui obiect, constructorul de copiere poate fi declarat privat (nu este nevoie de implementare)
Pentru o copie n adncime a unui obiect complex, constructorul de copiere este obligatoriu de implementat
CONSTRUCTOR DE COPIERE
Exemplu
class Curs { public: Curs(char *nume = NULL, char *ID_curs = NULL, int numarCredite = 0);
DESTRUCTOR
Definiie O funcie membr a unei clase a crui rol este de a dealoca instanele din memorie Sintax ~X() Caracteristici Funcia nu are tip de return Funcia nu are parametrii Funcia este prefixat cu ~ Procesul de distrugere a unui obiect Apelul funciei destructor Apelarea destructorilor datelor membru Eliberarea memoriei
DESTRUCTOR
O clas poate avea doar un destructor Compilatorul genereaz un destructor implicit dac nu este unul definit n clas
void foo() { Curs c(Prog. II, I1S2_P2, 10); Curs c1; Curs c2 = c; Curs *cc = new Curs(Algoritmica); delete cc; } class Curs { char *ID_curs; char *nume; int numarCredite; public: Curs(char *nume = NULL, char *ID_curs = NULL, int numarCredite = 0); ~Curs(); };
Curs:: Curs(char *n, char *id, int nr){ if (n == NULL) nume = NULL; else { nume = new char[strlen(n)+1]; strcpy(nume, n);} if (id == NULL) nume = NULL; else { ID_curs = new char[strlen(id)+1]; strcpy(ID_curs , id);} numarCredite = nr; }
Curs:: ~Curs(){ if (ID_curs != NULL) delete [] ID_curs; if (nume != NULL) delete [] nume; }
OBSERVAII
Destructori se apeleaz n ordinea invers a creri obiectelor Dac o clas conine membri pointeri trebuie implementate: Constructor Constructor de copiere Destructor Suprancrcarea operatorului =
SEPARAREA CODULUI
Fiiere surs care conin implementarea codului surs extensie .cpp Implementarea clasei Programul principal Programare de test
Fiierele header Fiiere separate care conin definiia clasei Permit compilatorului s recunoasc clasele cnd sunt folosite n alt parte Au extensia .h
EXEMPLU. COLOR.H
#ifndef COLOR_H_INCLUDED #define COLOR_H_INCLUDED class Color{ int red, green, blue; public: Color(int=0, int=0, int=0); void display(); private: double validateColor(double); };
#endif // COLOR_H_INCLUDED
EXEMPLU. COLOR.CPP
Color::Color(int r, int g, int b){
red = validateColor(r);
blue = validateColor(b); green = validateColor(g); cout << "Constructor Color "; display();
}
double Color::validateColor(double c){ return (0<=c && c<256)? c : 0; }
EXERCIIU
BIBLIOTEC Pentru clasele Biblioteca si Carte definiti constructori si destructori
CURS URMTOR
Continuare Clase Funcii i membri statici Funcii friend Autoreferine