Sunteți pe pagina 1din 32

CLASE

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

Un obiect este o instan a unei clase


Operaie Date Operaie Operaie

OBIECTE
careEsteTipulCursului()

modificareDate()

ID: I2S2_P2 nume: Programare 2 listaStudeni: [] nrCredite: 10 tipExaminare: Examen

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

char * careEsteTipulCursului ();


void modificareCredite (int); char *tipExamen; Student *listaStudenti; char *ID_curs; char *nume; int numarCredite; };

DATE MEMBRE CMPURI PROPRIETI

#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 *);

char * careEsteTipulCursului ();


void modificareCredite (int); char *tipExamen; Student *listaStudenti; char *ID_curs; char *nume; int numarCredite; };

VIZIBILITATE PRIVAT/ MPLICIT

#endif // CURS_H

EXEMPLU CLASE
class Curs { public: void afisareInformatii();

VIZIBILITATE PUBLIC

void adaugareStudenti(Student *);


char * careEsteTipulCursului (); void modificareCredite (int); protected: char *tipExamen; private: Student *listaStudenti;

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

Pentru a accesa datele membru ntr-un mod controlat

OBIECTE
Instanierea obiectelor Crearea unui obiect de un anumit tip Sintax

numeClasa numeObiect;
Exemplu Curs c;

OBIECTE
Exemplu Curs p2; Curs algo; Curs var;

ACCESAREA DATELOR /FUNCIILOR MEMBRE


(N EXTERIORUL CLASEI)

Prin operatorii . i ->


class Curs { public:

int main() { Curs alg; Curs *p2; Curs tab[10];

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);

Curs(char *nume, char *ID_curs);


Curs(char *nume, char *ID_curs, int numarCredite); private: Student *listaStudenti; char *ID_curs; char *nume; int numarCredite; char *tipExamen; }; void foo(){ Curs c1 = Curs("algoritmica"); //Corect Curs c2("Programare III", "I2S1_P3"); //Corect Curs c3("Logic", "E3S1_LOG", 10); //Corect Curs c4; //EROARE Curs *c5 = new Curs("Structuri de date", "I2S2_SD"); //Corect }

Care ar fi o soluie?

CONSTRUCRORI
class Curs { public: Curs(char *nume);

Curs(char *nume, char *ID_curs);


Curs(char *nume, char *ID_curs, int numarCredite); private: Student *listaStudenti; char *ID_curs; char *nume; int numarCredite; char *tipExamen; }; void foo(){ Curs c1 = Curs("algoritmica"); //Corect Curs c2("Programare III", "I2S1_P3"); //Corect Curs c3("Logic", "E3S1_LOG", 10); //Corect Curs c4; //EROARE Curs *c5 = new Curs("Structuri de date", "I2S2_SD"); //Corect }

Curs(char *nume = NULL, char *ID_curs = NULL, int numarCredite = 0);

CONSTRUCTORI. CONSTRUCTOR IMPLICIT


Constructorul implicit (default)

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);

Curs(const Curs &ref);


void modificareCredite (int); }; void g(Curs d) { d. modificareCredite(8); } void foo() { Curs c(Programare II, I1S2_P2, 10); // constructor definit de utilizator Curs c1; // constructor implicit Curs c2 = c; // constructor de copiere c2 = c; // NU se apeleaza constructorul de copiere g(c); // constructorul de copiere este apelat }

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

INTERFA VS. IMPLEMENTARE


Interfee Descriu serviciile pe care clieni unei clase le pot folosi i modul n care se obin aceste servicii
Definiia clasei conine o list a prototipurile funciilor publice

Implementarea funciilor membre ntr-un fiier surs separat de definiia clasei


Folosirea operatorului de definire a scopului :: pentru a lega definiia de declaraia funciei

Detaliile de implementare sunt ascunse


Codul clientului nu trebuie s tie detaliile de implementare

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();

cout << endl;


} void Color::display(){ cout << "[" << red << "," << green << "," << blue << "]";

}
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

Relaii dintre clase

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

  • Curs 13
    Curs 13
    Document22 pagini
    Curs 13
    _SirGod_
    Încă nu există evaluări
  • Curs 08
    Curs 08
    Document32 pagini
    Curs 08
    _SirGod_
    Încă nu există evaluări
  • Curs 12
    Curs 12
    Document25 pagini
    Curs 12
    _SirGod_
    Încă nu există evaluări
  • Curs 11
    Curs 11
    Document35 pagini
    Curs 11
    _SirGod_
    Încă nu există evaluări
  • Curs 06
    Curs 06
    Document27 pagini
    Curs 06
    _SirGod_
    Încă nu există evaluări
  • Curs 09
    Curs 09
    Document17 pagini
    Curs 09
    _SirGod_
    Încă nu există evaluări
  • Curs 10
    Curs 10
    Document23 pagini
    Curs 10
    _SirGod_
    Încă nu există evaluări
  • Curs 05
    Curs 05
    Document29 pagini
    Curs 05
    _SirGod_
    Încă nu există evaluări
  • pII Curs1
    pII Curs1
    Document34 pagini
    pII Curs1
    Nanu
    Încă nu există evaluări
  • Curs 02
    Curs 02
    Document33 pagini
    Curs 02
    _SirGod_
    Încă nu există evaluări
  • Curs 04
    Curs 04
    Document27 pagini
    Curs 04
    _SirGod_
    Încă nu există evaluări
  • Top Down
    Top Down
    Document4 pagini
    Top Down
    c1872524
    Încă nu există evaluări
  • Limbaje Formale
    Limbaje Formale
    Document110 pagini
    Limbaje Formale
    Andrei Manescu
    Încă nu există evaluări
  • Curs de Geometrie
    Curs de Geometrie
    Document99 pagini
    Curs de Geometrie
    mary
    100% (3)
  • Capitolul Nr8
    Capitolul Nr8
    Document8 pagini
    Capitolul Nr8
    _SirGod_
    Încă nu există evaluări
  • Capitolul Nr7
    Capitolul Nr7
    Document22 pagini
    Capitolul Nr7
    _SirGod_
    Încă nu există evaluări
  • Capitolul Nr10
    Capitolul Nr10
    Document24 pagini
    Capitolul Nr10
    _SirGod_
    Încă nu există evaluări
  • Capitolul Nr11
    Capitolul Nr11
    Document23 pagini
    Capitolul Nr11
    _SirGod_
    Încă nu există evaluări
  • Capitolul Nr9
    Capitolul Nr9
    Document13 pagini
    Capitolul Nr9
    _SirGod_
    Încă nu există evaluări
  • Capitolul Nr6
    Capitolul Nr6
    Document19 pagini
    Capitolul Nr6
    _SirGod_
    Încă nu există evaluări
  • Arhitectura Calculatoarelor Bibliografie
    Arhitectura Calculatoarelor Bibliografie
    Document3 pagini
    Arhitectura Calculatoarelor Bibliografie
    _SirGod_
    Încă nu există evaluări
  • Capitolul Nr5
    Capitolul Nr5
    Document18 pagini
    Capitolul Nr5
    _SirGod_
    Încă nu există evaluări
  • Suport de Curs - Comunicare
    Suport de Curs - Comunicare
    Document9 pagini
    Suport de Curs - Comunicare
    f1784748
    Încă nu există evaluări