Dorel Lucanu
Bibliografie
H. Schildt: C++ manual complet, Teora, 2000 Bjarne Stroustrup: The C++ Programming Language, Adisson-Wesley, 3nd edition, 1997
Manuale electronice
Peter Mller : Introduction to Object-Oriented Programming Using C++ Bruce Eckel : Thinking in C++, 2nd Edition *** : Online C++ tutorial SGI Standard Template Library Programmer's Guide
D. Lucanu
Organizare
pagina curs: e posibil ca ordinea unor tematici sa fie schimbata laboratoarele exercitii de antrenament exercitii de test examinare pe parcurs: 2 teste 60% din nota finala laborator 40% din nota finala conditii de promovabilitate 40% din punctajul maxim de la teste 60% din punctajul maxim de la laborator
D. Lucanu
Curs 1
Primul pas in POO incapsulare si ascundere Clase si obiecte atribute, metode, stari declararea claselor si obiectelor in C++ utilizarea obiectelor in C++ constructori, destructori exemplul Cont
D. Lucanu
Obiecte si clase
O prima definitie pentru obiecte si clase: Un obiect este caracterizat de: nume atribute (date) valorile atributelor la un moment dat definesc o stare metode (servicii, operatii)
O clasa
descrie unul sau mai multe obiecte ce pot fi precizate printr-un set uniform de atribute si metode.
D. Lucanu
nume atribute
metode
D. Lucanu
Specificarea clasei
Un cont bancar: are un titular, sold, o rata a dobinzii, numar de cont si se pot efectua operatii de depunere, extragere, actualizare sold
Clase (continuare)
D. Lucanu
datele si operatiile asupra lor sint incluse in aceeasi unitate sintactica datele si procesele devin legate
Cont
sold depune( )
sold
depune( )
D. Lucanu
Ascunderea informatiei
modul de structurare a datelor nu este cunoscut actiunile asupra datelor sint realizate numai prin operatiile (metodele) clasei si anumite actiuni pot fi ascunse: e.g., validare a contului
cont.sold += suma
cont.depune(suma)
OK!
D. Lucanu
Incapsulare
Incapsulare
Combinare + Ascundere
D. Lucanu
Combinarea: avantaje
defineste clar ce structuri de date sint manevrate si care sunt operatiile legale asupra lor
D. Lucanu
programe mai sigure si fiabile elibereaza clasele utilizator de grija cum sint manevrate datele previne aparitia erorilor produse de clasele utilizator ce manevreaza datele utizind cod "slab"
D. Lucanu
combinare + ascunderea informatiei = protejarea datelor previne aparitia erorilor prin limitarea accesului la date asigura portabilitatea programelor faciliteaza utilizarea exceptiilor interfata unei clase = operatiile cu care o clasa utilizator poate manevra datele
D. Lucanu
sectiuni publice
sectiuni private
D. Lucanu
Cont.h
class Cont { public: Cont(); ~Cont(); void depune(double); void extrage(double); void setDob(double); private: char *titular; char *nrCont; double sold; double rataDob; char *dataUltOp; void actualizeazaSold(); void atribuieNrCont(); };
D. Lucanu
Cont.cpp
Cont::Cont() { titular = NULL; dataUltOp = NULL; sold = 0; rataDob = 0; atrbuieNrCont(); } Cont::~Cont() { delete titular; delete dataUltOp; }
D. Lucanu
void Cont::depune(double suma) { sold += suma; } void Cont::setDob(double nouaRata) { actualizeazaSold(); rataDob = nouaRata; } . . .
Demo.cpp
void main() { Cont cont; cont.depune(2000); }
cont.sold += 5000;
O clasa este o implementare a unui tip de date abstract. Ea defineste atribute si metode care implementeaza structura de date respectiv operatiile tipului de date abstract. Un obiect este o instanta a unei clase. El este unic determinat de numele sau si defineste o stare reprezentata de valorile atributelor sale la un anumit moment particular.
D. Lucanu
Stiva
tipul de data abstract Stiva entitati de tip data: liste LIFO operatii push() pop() top() este_vida()
Stiva
D. Lucanu
Stiva.h
class Stiva { public: Stiva(); ~Stiva(); void push(char); void pop(); char top(); bool este_vida(); private: char tab[MAX_STIVA]; int virf; };
D. Lucanu
Stiva.cpp
void Stiva::push(char c) { if (virf == MAX_STIVA-1) throw "Depasire superioara."; tab[++virf] = c; }
char Stiva::top() { if (virf < 0) throw "Depasire inferioara."; return tab[virf]; }
D. Lucanu
Stiva_demo
Stiva s; char c = 'a';
try { while (true) { s.push(c++); cout << s.top() << endl; } } catch (char *mes_err) { cout << mes_err << endl; }
D. Lucanu
Utilizarea de clase
exista multe bibloteci de clase STL MFC etc pentru utilizare, trebuie cunoscuta doar interfata (elementele publice) nu intereseaza implementarea programul care utlizeaza clasa este independent de implementarea clasei Exemplu: string my-string.h STL
D. Lucanu
my_string.h
class string { public: // Constructori/destructori string(); string(char* new_string); string(const string& new_string); . . . ~string();
D. Lucanu
my_string.h (continuare)
// operatii int size() const; const char* c_str() const; // operatori friend string operator+ (const string& lhs, const string& rhs); string& operator= (const string& a_string); . . . private: char* char_arr; int string_length; };
D. Lucanu
my_string - utilizare
string s1("123"); string s2; s2 = string("abc") s1 = s2 ; string s3(s2); s1 = "armata"; b = (s1 == s2); // creare sir dintr-un sir C // creare sir vid + s1; //creare sir si concat. // operator atribuire // apelare constructor de copiere // constructor si op. atribuire // operatorul de testare a egalit.
D. Lucanu
D. Lucanu
D. Lucanu