Cuprins:
Introducere Concepte de baza Structura unei clase Constructorii si destructorul unei clase Ambiguitati la apelul constructorilor cu parametri cu valori implicite Observatii importante Functii membru si obiecte de tip const Operatorii new si delete
Programare procedurala: Programul principal apeleaza la proceduri. Dupa apelul acestora, controlul revine programului principal.
Programare procedurala:
Programul principal coordoneaza ce procedura este apelata si ce date sun trimise ca parametri.
Programare modulara: Programul principal coordoneaza alegerea si lansarea in executie modulelor adecvate catre care sunt trimise ca parametri datele corespunzatoare. Fiecare modul poate avea datele proprii.
Programare obiectuala: Obiectele (entitatile) unui program interactioneza unele cu celelalte, schimband mesaje intre ele.
Modelul:
Un punct de vedere abstract al problemei. Trebuie definite proprietatile cele mai importante ale acesteia.
Proprietati:
date caracteristici ce sunt definitorii; functii actiuni care modifica datele.
5
In cadrul programarii obiectuale (C++): -Se imbina structurile de date cu algoritmii care le prelucreaza incluzandu-le in tipuri de date complexe ce pot fi definite de programe denumite clase ; => => => Modularizare sporita; Impartirea sarcinilor in echipa; Suport pentru extinderea usoara a aplicatiei; In loc de biblioteca de functii biblioteca de clase
Exemple:
Autobuz
Tractor
a) Incapsulare - uniunea in cadrul clasei a structurii de date cu codul operatiilor necesare prelucrarii lor
Latra, carnivori
Ciobanesc
cocker
paza
companie
public:
void line_to (int vx, int vy, int vz); } // explicitarea functiei/functiilor coordonate_3D :: line_to (int vx, int vy, int vz) { x = vx; y = vy; z = vz; // plot(); etc. } // utilizare: coordonate_3D p1, p2, p3; coordinate_3D pt[20];
// :: - operator de rezolutie
// definire obiecte 11
//apelare: p1.line_to(3,4,5);
//sau
p1->line_to(3,4,5);
12
13
// atentie la erori
// primul constructor
=> daca nu este indeplinita se genereaza mesajul assertion failed: cond , File, line
14
Destructorul:
class vector{ public:
~ vector (); } vector::~vector() { delete [ ]p; // !!! assert((p = new int [size]) != NULL) }
15
17
ora_exacta:: ora_exacta (int o){ ora = o; minut = 0; secunda = 0; } ora_exacta:: ora_exacta (ora_exacta &o){ ora = o.ora; minut = o.minut; secunda = o.secunda; } //apel: ora_exacta o1, o2(10), o3(12, 15), o4(3, 4, 5);
18
void main() { nr n1; // ambiguu c1 sau c2 nr n2(1); // ambiguu c2 sau c3 nr n3(1, 2); // corect c3 }
//c1
//c2
//c3
19
// constructor c1 // constructor c2
20
21
b) O clasa in C++ poate contine doua categorii speciale de functii (membru) constructori si destructor (doar unul).
22
d) Obictele pot fi definite: local la nivelul unor functii; global avand un statut de variabile globale. Cand un obiect este este global variabila globala, constructorul este apelat atunci cand programul este executat. A se nota ca apelarea constructorului este facuta inainte de a lansa functia main() . Cand un obiect este declarat ca variabila statica, apelarea constructorului se face la lansarea functiei in care este declarat obiectul respective. Cand un obiect este o variabila locala (ne-statica) a unei functii, constructorul este apelat de fiecare data cand functia este apelata, in momentul (locul) in care variabila este definite.
23
Test::Test() {
cout<< apelare constructor al clasei Test\n; } // programul: Test g; void func() { Test l; cout << mesaj din functia func() << endl; }
// definitia constructorului
// obiect global
// obiec local
24
25
Pentru obiectele definite oriunde in interiorul unor functii destructorul este chemat doar inainte ca finalul acestora (inaintea lui return()).
Pentru variabilele statice sau globale destructorul este apelat inainte de terminarea programului. Atentie: cand un program este interrupt prin utilizarea unei secvente exit() destructorii sunt chemati doar pentu obiectele globale existente in momentul respective. Pentru obiectele definite local, in acesta situatie de fortare a terminarii, nu se face apelul!!!
26
Cuvantul cheie (rezervat) const apare uneori dupa lista de argumente a unor metode. Este utilizat pentru a specifica faptul ca functia membru respective nu modifica (nu altereaza) campurile de date ale obiectului sau, doar le citeste sau utilizeza.
Exemplu:
class dreptunghi { private: int lun; int lat; public: int get_lun(void) const; int get_lat(void) const; }
27
// nu este necesar
//atributul trebuie sa apara si in definitia functiei: int Dreptunghi::get_lun() const { return (lun); } int Dreptunghi::get_lat() const { return (lat); }
//Nu se modifica valoarea datelor clasei. Expresii de genul: //lun = 0; // determina erori la compilare
28
// nu este posibil
Exemplu:
int *ip; ip = new int; //.. delete ip;
30
Prezenta parantezelor patrate [ ] in alocare (new) necesita prezenta sa la dealocare (delete). Lipsa in zona dealocarii a [ ] duce la eliberarea incomplecta a memoriei.
Person *pp; pp = new Person; delete pp; //ptr la un obiect Person //construit obiectul constructor fara parametri //distrus
31
pp = new Person(Ion, Delea Veche, 10); //constructor cu parametri delete pp; //now destroyed
32