Sunteți pe pagina 1din 11

Examen la Programarea Orientat pe Obiecte

1. Clase.
O definitie bruta a clasei ar fi aceea ca este un concept extins al unui tip de date abstract : in loc sa contina numai informatii
variabile , contine si functii. Un obiect este o instantiere a unei clase. Mai precis, clasa ar fi tipul de date si obiectul ar fi variabila. La
programarea obiectuala stau la baza: incapsularea (private, protected, public, published), polimorfismul si mostenirea.
Clasa reprezinta descrierea unei multimi de obiecte care au aceeasi structura si acelasi comportament. Ca urmare, intr-o clasa vom
gasi definitiile datelor si ale operatiilor ce caracterizeaza obiectele clasei respective.
Structuri si clase.
O structur de date este un grup de elemente de date grupate mpreun sub un singur nume. O structura este un tip de date
definit de utilizator cuprinzand variabile multiple, de diferite tipuri. Structurile sunt utile pentru descrierea obiectelor. Spre deosebire de
tablouri, care stocheaza mai multe valori de acelasi tip, structurile stocheaza valori de diferite tipuri.
Structura se declara folosind cuvantul rezervat struct . Continutul structurii este pus intre acolade. Dupa ultima acolada, este
obligatoriu caracterul punct si virgula. Corpul structurii se compune din variabilele corelate numite variabile membru .
2. Uniuni si clase.
Uniunea aloca o poriune corespunztoare din memorie pentru a fi accesata ca diferite tipuri de date. Declaraia sa i folosirea este
similar cu ceaa structurilor, dar funcionalitatea acesteia este cu totul diferit, toate elementele declaraiei de uniune ocup acelai spaiu
fizic n memorie, dimensiunea acesteia fiind tipul cu cea mai mare lungime din declaraiei. Deoarece toate dintre ele se refer la aceeai
locaie n memorie, modificarea unuia dintre elemente vor afecta valoarea tuturo, nu putem stoca valori diferite n ele independente una
de cealalt. Una dintre folosirea uniunei este de a uni un tip elementar cu un array de elemente sau structuri mai mici.
3. Uniuni anonime.
Limbajul C++ ne permite sa creem structuri anonime. Daca nu specificam un nume pentru uniune si nici nu creem un obiect la
initializare, uniunea devine o uniune anonima si putem accesa membrii ei direct, folosiind numele membriilor, ca si cum uniunea nu ar
exista.
Putem folosii uniuni anonime in structuri. Asta inseamna ca, putem accesa membrii
uniunii ca si cum ar fii ai structuri, insa pastram caracteristicile uniunii.
struct carte{
string autor;
string editura;
int an_aparitie;
union {
int lei;
int dolar;
int euro; };
}o_carte;
4. Functii prietene.
Prietenii sunt funciile sau clasele declarate cu cuvntul cheie friend. Dac vrem s declare o funcie externa ca prieten a clasei, aceast
funcie va avea acces la membrii private i protected din ea, astfel mai intii se declara prototipul functiei cu cuvintul cheie friend in
corpul clase iar functia va fi externa clasei.
De aceea, o functie obisnuita poate fi utilizata pentru a prelucra obiectele unei clase, daca ea se modifica in asa fel incat sa
devina functie membru. S-a facut un compromis pentru a admite accesul la elementele protejate si pentru anumite functii care nu sunt
membru. Aceste functii au fost numite functii prieten (friend) pentru clasa respectiva. Ele trebuie precizate ca atare in definitia clasei.
In acest scop, prototipurile lor sunt prezente in definitia clasei si sunt precedate de cuvantul cheie friend.
5. Clase prietene.
Aa cum putem defini o functie prieten, putem defini si o clas ca prieten a altei clase, astfel prima clasa va avea acces la membrii
private si protected din clasa a doua.
O clasa este prietena cu o alta clasa daca ea are acces la datele membru ale acesteia.
O functie, respectiv o clasa prietena se declara utilizand cuvantul friend astfel:
a) friend Tip_functie Nume_functie ( Lista_parametri_formali ); // Functiefriend globala
b) friend Tip_functie Nume_clasa::Nume_functie(Lista_par._formali); // Functie friend membru
c) friend
Nume_clasa;
// Clasa friend
6. Functii inline.
Funciile inline este tehnica de optimizare utilizate de compilatoarelor. Se poate adauge pur i simplu cuvntul cheie inline la
prototipul functiei, astfel la fiecare apel chemarea functiei va fi inlocuita cu corpul ei.
O funcie declarat inline se schimb la compilare cu corpul ei, i se spune c apelul funciei se realizeaz prin expandare. n felul
acesta se elimin operaiile suplimentare de apel i revenire din funcie. Dezavantajul funciilor inline este acela cproduc creterea
dimensiunilor programului compilat, de aceea se recomand a fi utilizate pentru funcii de dimensiuni mici(maximum 3-4 instruciuni).
n plus, mai exist i unele restricii privind funciile inline: ele nu pot fi declarate funcii externe, deci nu pot fi utilizate dect n
modulul de program n care au fost definite i nu pot conine instruciuni ciclice (while, for, do-while).
7. Definirea functiilor inline ntr-o clas.
O functie membru, care este definit ca membru al clasei se numete o funcie de membru

inline. Funciile membre care conin cteva linii de cod sunt de obicei declarate inline.
class Y {
public:
char* f() { return 1; }
};
Este functie inline
class Y {
public:
char* f();
};
inline char* Y::f() { return 1; }
daca declaram functia in afara clasei atunci inline se pune la declaratie ei si nu la prototipul din clasa.
8. Functii constructor cu parametrii.
Constructorii sunt metode speciale care folosesc la crearea si initializarea instantelor unei
clase. Constructorii au acelasi nume ca si clasa careia i apartin si sunt apelati de fiecare data
cnd se creaza noi instante ale clasei. Ca orice alt funcie, un constructor poate fi, suprancrcat (funcii care au acelai nume dar un
numr diferit de parametri). Compilatorul va apela cel a crui parametri se potrivesc cu argumentele utilizate n apelul funciei.
9. Functiile constructor cu un parametru: un caz special.
Exista si modalitatea de a initializa membrii printr-o lista de instantiere (initializare), care apare n implementarea constructorului,
ntre antetul si corpul acestuia. Lista contine operatorul :, urmat de numele fiecarui membru si valoarea de initializare, n ordinea n care
membrii apar n definitia clasei.
class complex ;
complex::complex(double x, double y):real(x),imag(y).
10. Membrii de tip static ai claselor.
In C++, se pot defini date membre cu o comportare speciala, numite date statice. Acestea sunt alocate o singura data, existand sub
forma unei singuri copii, comuna tuturor obiectelor de tipul clasa respectiv, iar crearea, initializarea si accesul la aceste date sunt
independente de obiectele clasei. Sintaxa este: static DeclarareMembru.
O variabila membru static exista inainte de a fi creat orice obiect din acea clasa. De aceea el poate fi utilizatdirect in main(). Si
deoarece exista inainte de crearea unui obiect, i se poate da oricand o valoare, dar nu in clasa incare este declarat, ci cand este definit.
11. Membrii statici de tip date.
O data membru al unei clase poate fi declarata static, indiferent de zona in care a fost inclusa (publica sau privata). O asemenea
data este creata si initializata o singura data, in contrast cu datele ne-statice, care sint create pentru fiecare obiect al clasei. O data static
este creata la inceputul programului, dar face totusi parte din clasa. Datele static declarate public sint ca variabilele normale:ele pot fi
accesate de intregul cod folosindu-se numele lor, precedat de numele clasei si de operatorul scope.
12. Functii membre statice.
Diferenele ntre o funcie de membru static i non-statice sunt dup cum urmeaz.
a. functie membru static poate accesa doar datele statice membre, funciile membru
statice, date i funcii din afara clasei. O funcie membru non-statica poate accesa toate
cele de mai sus, inclusiv membrii statici de date.
b. functie membru statice pot fi numite, chiar i atunci cnd o clas nu este instaniata, o
funcie non-statice nu poate
c. functie membru static nu pot fi declarate virtual, non-static poate
d. functie membru statica nu poate avea acces la "this" pointer al clasei.
Funciile membre statice nu sunt utilizate foarte frecvent n programare. Dar cu toate
acestea, ele devin utile ori de cte ori avem nevoie de funcii care sunt accesibile chiar i
atunci cnd clasa nu este instantiata.
13. Cnd sunt executati constructorii si destructorii.
Constructorul este apelat n momentul declararii obiectelor.
Destructorul este apelat automat, la iesirea din blocul n care este recunoscut acel obiect.
14. Operatorul de specificare a domeniului.
:: (operatorul de specificare a domeniului) este folosit pentru a modifica variabilele ascunse.
n urmtorul exemplu, declararea variabilei int X ascunde clasa X, dar putem apela membrii
statici ai clsei prin operatorul ::
15. Clase imbricate.
Atunci, cnd o clas se definete n cadrul unei alte clase, se spune c sunt clase imbricate.
O clas imbricat este valid doar n interiorul clasei ce o conine. Avnd n vedere posibilitile oferite prin mecanismul de
motenire, astfel de clase se utilizeaz mai rar. O clas imbricat este declarat n domeniul de vizibilitate al altei clase.Numele unei
clase imbricate este vizibil locala in clasa de baza. Cu exceptia cazului utilizarii explicita a pointerelor, obiecte unei clase imbricate
poate utiliza doar constructorii, membrii statici, enumerarile din clasa de baza ori cele declarate global.

Clasele imbricate sunt considerate ca entitati membre ale clasei unde au fost definite. Clasele interne pot accesa restul
membrilor clasei externe, in corpul careia a fost definita, chiar daca acesti membri prezinta modificatorul de acces private. Clasele
imbricate statice nu au acces la alti membri ai clasei externe. O clasa imbricata poate fi declarata cu orice modificator de acces.
Clase locale.
O clas locala este declarat n definiia unei funcii. Declaraiile ntr-o clas local poate folosi doar nume de tip, enumerri,
variabile statice, variabile si functii extere din domeniul vizibil.
16. Transmiterea obiectelor catre functii.
In C++ exista doua posibilitati de transmitere a parametrilor actuali catre o functie:
1. mecanismul de transmitere prin valoare
2. mecanismul de transmitere prin referinta
Primul este cunoscut, constituie modul standard de transmitere a parametrilor in C. 1. La apelul unei functii cu parametri de
tip valoare, , o functie apelata nu modifica valorile initiale ale parametrilor efectivi transmisi prin valoare
Prin folosirea parametrilor formali referinta, se permite realizarea transferului prin referinta(transmiterea adresei), se elimina
astfel necesitatea la utilizarea parametrilor formali pointeri, in cazul in care modificarile facute in interiorul functiei asupra parametrilor
trebuie sa ramana si dupa revenirea din procedura.
Cu alte cuvinte, o functie apelata prin referinte, modifica valorile initiale ale parametrilor efectivi transmisi prin referinte .
Acesta proprietate, a apelului prin referinte, constituie un mijloc foarte important prin care o functie, in afara valorii returnate prin
valoarea functiei furnizata de instructiunea return(expresie), poate returna mai multe valori rezultat, prin intermediul parametrilor de
tip referinta, ca si in cazul apelarii prin adrese, pointeri;
17. Returnarea obiectelor.
Cand un obiect este returnat de o functie, este creat un obiect temporar, care contine valoarea returnata.Acesta este de fapt obiectul
returnat de functie. Daca obiectul care a fost returnat are un destructor care elibereaza memoria dinamica alocata, acea memorie va fi
eliberata chiar daca obiectul care primeste valoarea returnata inca o mai foloseste. Exista cai de prevenire a acestei situatii care folosesc
supraincarcarea operatorului de atribuire si definirea unui constructor de copii.
18. Atribtuirea obiectelor.
Este indicat ca implementarea operatorului de atribuire sa nu permita atribuirea catre acelasi obiect - de obicei acesta este
modificat:
Este indicat ca orice clasa sa defineasca propriul operator de atribuire, deci lucrurile sa nu fie lasate a fi tratate implicit de
compilator - cu atat mai mult daca are campuri de tip pointer. Daca este vorba despre o clasa derivata, atribuirea trebuie sa realizeze
operatia si pentru membrii clasei de baza.
19. Matrice, pointeri si referinte.
Pentru matrice trebuie obligatoriu constructori implicit (deoarece nu poate fi initializata).
Matricea bidiminsionala este pointer catre pointer.
Pointerii sunt variabile care contin adresa unei alte zone de memorie. Ei sunt utilizati pentru a date care sunt cunoscute prin adresa
zonei de momorie unde sunt alocate.
Referintele, ca si pointerii, sunt variabile care contin adresa unei zone de memorie. Semantic, ele reprezinta aliasuri ale unor
variabile existente.Referintele sunt legate de variabile la declaratie si nu pot fi modificate pentru a referi alte zone de memorie. \
intr-un program C++ valid nu exista referinte nule
20. Matrice de obiecte. 21. Matrice de initializare
Pentru a declara matrici de obiecte care sa poata fi initializate trebuie definit un constructor cu parametri care sa faca posibila
initializarea. Pentru a declara matrici de obiecte care sa nu fie initializate trebuie definit un constructor fara parametri. Pentru a declara
matrici de obiecte care sa fie cand initializate cand neinitializate se supraincarca functia constructor.
21. Pointeri ctre obiecte.?
Indicatori ctre membri v permite s se refer la membri nonstatic de clasa de obiecte. Se poate utiliza un pointer la membru la
punctul de a unui membru de clas statice pentru adresa de membru statice nu este asociat cu orice obiect special. Pentru a indica un
membru de clas statice, trebuie s utilizai un indicatorul normal
22. Pointerul this.
Cand este apelata o functie membru, i se paseaza un argument implicit, care este un pointer catre obiectul care a generat apelarea
(obiectul care a invocat functia). Acest pointer este numit this.
23. Pointeri ctre tipuri derivate.
In general un pointer de un anume tip nu poate indica un obiect de alt tip. Totui, este posibil ca un pointer de tipul unei clase de
baz s pointeze (refere) ctre un obiect de tipul unei clase derivate.. Dei putei referi un obiect de tip derivat cu un pointer de tipul
bazei, vei putea accesa numai membrii motenii din tipul de baz. Nu vei putea accesa membrii particulari clasei derivate. Putei
totui s folosii un cast i s convertii un pointer de tip baz ctre unul derivat, pentru a avea acces total la clasa derivat.
24. Referinte.
Referintele, ca si pointerii, sunt variabile care contin adresa unei zone de memorie.
Semantic, ele reprezinta aliasuri ale unor variabile existente.
Referintele sunt legate de variabile la declaratie si nu pot fi modificate pentru a referi
alte zone de memorie. Sintaxa folosita pentru declararea unei referinte este:
Tip & referinta = valoare;
25. Parametri de referint.
Functiile C + + transfer n mod normal parametrii prin valoare. Ele primesc valorile efective ale parametrilor sub forma de copii
ale datelor originale. Pot modifica n interiorul lor valorile parametrilor prin pointerifr a afecta datele originale. Modificarea valorilor

parametrilor se poateface mai simplu prin transferul parametrilor nu prin valoare, ci prinreferin, eliminnd instruciunile care combin
variabilele pointer cucele normale.O referina creaz un nume alternativ ( alias ) pentru o variabil.
Dup declararea unei referine n program putem folosi atat variabila ct i referina. Referina nu este o variabil. Ea nu mai
poate fi modificat dup ce a fostasociat unei variabile. Folosirea unei referine ca identificator este utilcnd aceasta apare ca
parametru formal al unei funcii.
Rezultatul unei funcii poate fi transferat prin valoare, pointer sau referin
26. Transmiterea referintelor ctre obiecte.
Cand se face apel prin referinta, nu se face nici o copie a obiectului, asa cum se intampla cu apelul prin valoare. Aceasta inseamna
ca nici un obiect folosit ca parametru nu este distrus atunci cand se termina functia, iar destructorul parametrului nu este apelat.
NOT: cand parametrii sunt transmisi prin referinta, schimbarile obiectului din interiorul functiei afecteaza obiectul apelant.
27. Returnarea referintelor.
O functie poate sa returneze o referinta ceea ce face ca ea sa poata fi folosita in membrul stang al unei instructiuni de atribuire.
28. Referinte independente.
O referinta care este doar o simpla variabila este numita referinta independenta.
29. Restrictii pentru referinte.
Referinta independenta este de mica valoare practica deoarece ea este de fapt doar un alt nume aceeasi variabila. Avand doua nume
care descriu acelasi obiect programul poate deveni confuz.
30. Operatorii de alocare dinamic din C++.
C++ definete doi operatori de alocare dinamic: new i delete. Aceti operatori aloc
i elibereaz memoria dinamic, in timpul execuiei programului. Operatorul new aloc memorie i returneaz un pointer ctre adresa de
inceput a zonei alocate. Operatorul delete elibereaz zona de memorie alocat cu new.
n limbajul C++ alocarea dinamica a memoriei si eliberarea ei se pot realiza cu operatorii new si delete. Folosirea acestor
operatori reprezinta o metoda superioara, adaptata programarii orientate obiect. Operatorul new este un operator unar care returneaza
un pointer la zona de memorie alocata dinamic. n situatia n care nu exista suficienta memorie si alocarea nu reuseste, operatorul new
returneaza pointerul NULL.
31. Alocarea de memorie obiectelor.
Alocarea static a memoriei: adresele i dimensiunile obiectelor ce fac uz de alocarea static a memoriei sunt fixate in momentul
compilrii i pot fi plasate intr-o zon de dimensiune fix ce corespunde unei seciuni din cadrul fiierului linkedidat final. Acest tip de
alocare a memoriei se numete static deoarece locaia i dimensiunea lor nu variaz pe durata de execuie a programului.
Alocarea automat a memoriei: obiectele temporare (variabilele locale declarate in cadrul unui bloc de cod) sunt stocate in cadrul
de stiv asociat funciei apelate, iar spaiul alocat este automat eiberat i reutilizat dup ce s-a prsit blocul in care acestea au fost
declarate.
Alocarea dinamic a memoriei: blocuri de memorie de orice dimensiune pot fi alocate
intr-o zon de memorie numit heap prin intermediul funciilor malloc(), calloc() i realloc().
Alocarea de memorie se face in C++ folosind operatorul new si operatorul pereche delete.
32. Suprancrcarea functiilor si a operatorilor.
Supraincrcarea (overloading) funciilor i operatorilor reflect posibilitatea de a atribui unui simbol mai multe semnificaii.
Supraincrcarea unei funcii inseamn utilizarea aceluiai identificator de funcie pentru cel puin dou funcii cu condiia ca s
difere intre ele prin tipuri i/sau numr de parametri (cu prototipuri diferite). In acest fel compilatorul poate selecta, la un moment dat,
funcia care trebuie apelat.
Suprancrcri de functii si ambiguitti.
Conversia automat a tipului, in C++, poate conduce la apariia unor ambiguiti in supraincrcarea funciilor. Situatia in care la un
apel compilatorul nu poate alege intre doua sau mai multe functii supraincarcate se numeste ambiguitate. Instructiunile ambigue sunt
tratate ca erori, iar programul nu va fi compilat.
33. Suprancrcarea functiilor constructor.
Dupa cum s-a invatat, functia constructor este o metoda speciala a claselor care se executa automat cand se creeaza diverse instante
ale unui obiect. Supraincarcarea functiilor presupune declararea si definirea unor functii cu acelasi nume, astfel incat, in functie de
parametrii transmisi, la compilare, sa se poata decida care dintre functiile cu acelasi nume sa fie adresata Ca orice functie in C++ si
functiile constructor pot fi supraincarcate si adresate. Daca o functie constructor este supraincarcata, atunci, la creearea unei instante a
unui obiect, se va executa totdeauna prima functie constructor, cea de-a doua executandu-se cand prima nu poate fi executata din
diferite motive, ca de exemplu, transmiterea eronata a parametrilor.
34. Crearea unei functii operator membru.
In limbajul C++, exista posibilitatea supraincarcarii functiilor membre, prin folosirea acelorasi identificatori pentru mai multe
functii, care urmeaza sa fie apelate si executate, la un anumit moment de timp. Inlaturarea ambiguitatilor legate de apelarea functiilor
supraincarcate se poate face prin diferentierea parametrilor efectivi cum ar fi: numar diferit de parametri, tipuri diferite de parametri,
etc..
35. Crearea operatorilor de incrementare si de decrementare cu prefix si cu sufix.
Operatorii de incrementare i decrementare pot fi folosii atat ca prefix cat i sufix. Cand sunt folosii ca prefix, operaie de
incrementare sau decrementare se realizeaz inainte de evaluarea expresiei, iar atunci cand sunt folosii ca sufix, operaia de
incrementare sau decrementare se realizeaz dup evaluarea expresiei.
36. Suprancrcarea operatorilor prescurtati.
Operatori prescurtai sunt +=, -= si restul de operatori care urmeaza acest ablon (pattern).
Cand se supraincarc unul din aceti operatori se combina o operatie cu o atribuire.
37. Restrictii la suprancrcarea operatorilor.

Trebuie s precizm faptul c precedena, aritatea (numrul de operanizi) i asociativitatea operatorilor nu poate fi schimbat prin
supraincrcare. Nu este posibil s crem noi operatori, doar cei existeni putand fi supraincrcai. Operaiile realizate de operatorii
tipurilor de date predefinite nu pot fi modificate. Programatorul nu poate, de exemplu, s schimbe modalitatea in care se adun doi
intregi. Supraincrcarea operatorilor este valabil doar pentru tipuri de date definite de programator sau pentru operaii care combin
tipuri de date definite de
programator cu tipuri de date predefinite.
Supraincarcarea operatorilor este supusa urmatoarelor restrictii:
- Se pot supraincarca doar operatorii existenti; nu se pot crea noi operatori.
- Nu se poate modifica aritatea (numarul de operanzi) operatorilor limbajului (operatorii unari nu pot fi supraincarcati ca operatori
binari, si invers).
- Nu se poate modifica precedenta si asociativitatea operatorilor.
- Nu pot fi supraincarcati operatorii . ::? si :
38. Suprancrcarea operatorilor folosind o functie friend.
Se poate suprancrca un operator relativ la o clas folosind o funcie friend. Deoarece unprieten nu este membru al clasei, nu are
disponibil un pointer de tip this.De aceea, unei funcii suprancrcate de tip friend operator I se vor transmiteexplicit operanzii. Deci,
dac suprancrcm un operator unar vom avea un parametru,dac suprancrcm unul binar vom avea doi parametri.Dac
suprancrcm un operator binar, operandul din stnga este pasat n primulparametruiar cel din stnga n al doilea parametru.
Putei supraincrca un operator pentru o clas folosind o funcie nonmembr, care de obicei este prieten cu clasa. Deoarece o
funcie friend nu este membr a clasei, aceasta nu are pointerul this. Aadar, o funcie operator prieten primete explicit operanzii. Asta
inseamn c o funcie prieten ce supraincarc un operator binar va avea doi (2) parametri, i o funcie prieten ce supraincarc un
operator unar, va avea un (1) parametru. In cazul supraincrcrii unui operator binar cu o funcie prieten, operandul din stanga este
tranmis primului parametru, iar cel din dreapta este transmis celui de-al doilea parametru.
39. Folosirea unui friend pentru a suprancrca ++ si --.
Operatorii ++ si -- sunt operatori unari, iar supraincarcarea acestora se poate face utilizand atat functii membru non-statice, cat si
functii friend. Pentru a putea distinge intre forma prefix si cea postfix a acestor operatori se aplica urmatoarea regula: O functie-membru
operator++ care nu primeste nici un parametru (cu exceptia parametrului implicit this) defineste operatorul ++ postfix, in timp ce
functia operator++ cu un parametru de tip int defineste operatorul ++ postfix. La apel, in cazul formei postfix, utilizatorul nu este
obligat sa specifice nici un argument, valoarea transmisa implicit fiind 0. }
40. Functiile friend operator adaug flexibilitatea.
41. Suprancrcarea operatorilor new si delete.
-chiar si supraincarcat operatorul new va conlucra cu constructorul clasei in alocarea si eventual initializarea unui obiect dinamic .La
supradefinire functia operator va primi dimensiunea zonei de alocat si va returna adresa memoriei alocate .
-obligatoriu functia new supraincarcata trebuie sa returneze un pointer spre memoria alocata sau zero( NULL) daca apare o eroare de
alocare
-Cand new si delete sunt functii membre ale unei clase operatorii astfel supraincarcati vor fi folositi numai pentru obictele clasei , iar
cand se utilizeaza operatorii new si delete pentru alte tipuri de date se va apela new si delete impliciti din C++;
Operatorii new i delete pot fi suprancrcai ca funcii operatori membre statice.
Funcia operator new are semntura: void* operator new(size_t); Operatorul redefinit apeleaz constructorul clasei dup alocarea
dinamic pe care o realizeaz. Funcia operator delete are semntura: void operator delete(void*); unde parametrul este un pointer la
obiectul eliminat.
42. Suprancrcarea operatorilor new si delete pentru matrce.
Supraincarcarea operatorilor new si delete pentru matrice au una din formele :
ex. //se aloca memorie unei matrice de obiecte
//este apelat automat functia constructor a fiecarui obiect al matricei
delete apeleaza repetat destructorul clasei pentru fiecare membru al
masivului ;
-nu este permisa mixarea celor doua mecanisme de alocare si eliberare de memorie
(cu functii malloc( ) si free( ),respectiv cu operatorii new si delete )adica alocare cu
malloc( ) si dezolocare cu delete( ) sau alocare cu new si dezalocare cu free( ) .
43. Suprancrcarea unor operatori speciali.
44. Suprancrcarea pentr [].
Operatorul predefinit se utilizeaza pentru a face acces la elementele unui tablou, in constructii de forma tablou[expr]. Aceasta
constructie poate fi privita ca o expresie formata din operanzii tablou si expr, carora li se aplica operatorul [ ]. Putem supraincarca acest
operator pentru a da sens constructiilor de indexare si pentru cazul in care operanzii sunt obiecte. Operatorul
[ ] este numit subscript sau indice i este util n accesarea elementelor unui tablou (variabile cu indici).
Funcia operator [ ] este o funcie membr n care primul operand trebuie s fie un obiect de tipul clasei din care provine, iar al
doilea operand este singurul parametru explicit al funciei de un tip oarecare. Avnd n vedere scopul acestui operator, de a asigura
nscrierea indecilor ntr-un tablou, adesea este utilizat tipul int pentru acest al doilea operand.
Nu se poate folosi funcie friend pentru suprancrcarea operatorului [ ].

45. Suprancrcarea pentru ().


Operatorul ( ) este cunoscut sub denumirea deoperator de apel de funcie. O funcie se apeleaz prin: id_funcie
(lista_param_efectivi)
O astfel de construcie poate fi privit ca un operand. n realitate ea este format din doi
operanzi: id_funcie ilista_param_efectivi crora li se aplic operatorul binar ( ).Cel de-al doilea parametru poate s fie i vid. Aceast
situaie este caracteristic acestui operator, spre deosebire de ceilali operatori binari, care nu admit operand vid.
La suprancrcarea operatorului ( ), se pot folosi parametri de orice tip, i se poate returna o valoare de orice tip n funcie de scopul
propus.
46. Suprancrcarea pentru >.
Suprancrcarea operatorului -> se realizeaz printr-o funcie membr nestatic. La suprancrcare, operatorul ->este considerat ca
operator unar care se aplic operandului care l precede. n construcia:
obiect->element;
obiect este o instaniere a clasei respective, cel care genereaz apelul. n ceea ce privete element, el trebuie s fie un element accesibil
n cadrul obiectului returnat de funcia operator->( ).
47. Suprancrcarea pentru +.
In limbajul C++, operatorii + i au diverse funcii dependente de context: operaii
aritmetice pentru valori intregi, reale, operaii cu pointeri. Acesta este un exemplu de
supraincrcare a operatorilor. Limbajul C++ permite programatorilor s supraincarce
majoritatea operatorilor pentru ca acetia s poat fi folosii in contextul unor noi clase. Unii operatori sunt supraincrcai mai frecvent
decat alii, cum ar fi de exemplu operatorul de asignare sau cei aritmetici de adunare sau scdere. Aciunile implementate de operatorii
supraincrcai pot fi realizate la fel de bine i prin apeluri explicite de funcii, ins folosirea notaiei cu operatori este mai clar i mai
intuitiv. Operaia de adunare + funcioneaz pentru variabile de tip int, float, double i un numr de alte tipuri de dat predefinite
deoarece operatorul + a fost supraincrcat chiar in limbajul de programare C++.
48. Suprancrcarea pentru -.
Daca avem doua variabile de tip Complex x si y apelul x-y se va transforma in x.operator-(y)
Restrictie: in acest caz tipul primului operand este mereu tipul clasei.
Proprietatile operatorilor care nu pot fi modificate:
pluraritatea
precedenta si asociativitatea
49. Suprancrcarea pentru operatorii: # (atribuire)-=.
(atribuire) - In limbajul C++ se pot face atribuiri de obiecte care sunt instantieri ale aceleiasi clase. Daca programatorul nu defineste
in mod explicit un operator de atribuire pentru o clasa, compilatorul genereaza unul implicit. Comportarea operatorului de atribuire
implicit presupune ca datele membru ale obiectului din dreapta operatorului = se atribuie la datele membru corespunzatoare ale
obiectului din partea stanga a operatorului, dupa care se returneaza o referinta la obiectul modificat. Aceasta copiere este de tip
"membru la membru" asa cum se intampla si in cazul constructorului de copiere generat de compilator. Putem descrie deci functionarea
operatorului de atribuire generat de compilator.
50. Suprancrcarea pentru .(punct).
Urmatorii operatori nu pot fi supraincarcati: . :: .* ?: sizeof
51. Suprancrcarea pentru sizeof.
Urmatorii operatori nu pot fi supraincarcati: . :: .* ?: sizeof
52. Suprancrcarea pentru operatorul virgul.
Virgula este un operator binar. Operatorul virgul suprancrcat, pentru a aciona ntr-un mod similar cu aciunea sa normal,
trebuie s renune la valoarea din termenul su stng i s atribuie valoarea operaiei, termenului din dreapta. Astfel c ntr-o list, n
care virgula este un separator, se va renuna la toi termenii prezeni, mai puin ultimul termen din dreapta.
Permite evaluarea unei liste de obiecte i returneaz referina ultimului obiect din
list. Este recomanat s se lucreze cu pointeri constani de coninut constant.
const persoana &operator,(const persoana &p) const
{ return p;}
53. Mostenirea.
Motenirea permite crearea unei ierarhii de clase, pornind de la cea mai general la cea mai concret. Procesul implic definirea
unei clase de baz care definete toate calitile commune ale obiectelor ce vor deriva din baz. Clasele derivate din baz se numesc
clase derivate. O clas derivat include toate caracteristicile clasei de baz plus caliti specifice ei (ale clasei derivate). Forma general
a motenirii este:
class nume-clasa-derivata : acces nume-clasa-baza { // corpul clasei };
54. Controlul accesului la clasa de baz.
Constructorul clasei de baza se va executa inaintea constructorului clasei derivate, iar destructorul clasei derivate se va executa
inaintea destructorului clasei de baza. Accesul la membrii clasei de baz motenii in clasa derivat este controlat de specificatorul de
acces
(public, protected, private) din declaraia clasei derivate.O regul general este c , indiferent de specificatorul de acces declarat la
derivare, datele de tip private in clasa de baz nu pot fi accesate dintr-o clas derivat. O alt Regul generala este ca prin derivare, nu
se modific tipul datelor in clasa de baz.
55. Mostenirea si membrii protejati.

Cand un membru al clasei este declarat protected, acel membru nu este accesibil prilor de program nonmembre, dar este accesibil
claselor derivate. Cand zic c este accesibil claselor derivate m refer la faptul c poate fi accesat direct de membrii clasei derivate. In
primul exemplu, clasa base are doi membri privai: a i b, care nu pot fi accesai in clasa derivat
Mostenirea protected a clasei de baz.
Membrii public ai unei clase de baz pot fi accesai de orice funcie din program. Membrii private al unei clase de baz sunt
accesibili doar funciilor membre sau prietenilor clasei.
Cand un membru al clasei este declarat protected, acel membru nu este accesibil prilor de program nonmembre, dar este accesibil
claselor derivate. Cand zic c este accesibil claselor derivate m refer la faptul c poate fi accesat direct de membrii clasei derivate. In
primul exemplu, clasa base are doi membri privai: a i b, care nu pot fi accesai in clasa derivat.
Dac specificatorul de acces din declaraia clasei derivate este protected, atunci toi membrii de tip public i protected din clasa
de baz devin membri protected n clasa derivat. Bineneles,membrii de tip private n clasa de baz nu pot fi accesai din clasa
derivat.
56. Mostenirea din clasa de baz multiple.
n cazul mostenirii multiple este posibila mostenirea din mai multe clase de baza: class derivata : acces1 baza1, ..., accesn bazan { //
corp clasa; };O baza directa este mentionata n lista claselor de baza ale clasei derivate.
Prin mostenire multipla si indirecta se creaza ierarhii de clase, care sunt grafuri orientate aciclice (n cazul mostenirii simple avem un
arbore orientat).
Exemplu de motenire multipl:
triunghi

dreptunghic

dreptunghic-isoscel

isoscel

echilateral

57. Constructori, destructori si mostenire.


Constructorul este o metod special a unei clase, care este membru al clasei respective i are acelai nume ca i clasa.
Constructorii sunt apelai atunci cnd se instaniaz obiecte din clasa respectiv, ei asigurnd iniializarea corect a tuturor variabilelor
membru ale unui obiect i garantnd c iniializarea unui obiect se efectueaz o singur dat.
Constructorii se declar, definesc i utilizeaz ca orice metod uzual, avnd urmtoarele proprieti distinctive:
- poart numele clasei creia i aparin;
- nu pot returna valori; n plus (prin convenie), nici la definirea, nici la declararea lor nu
poate fi specificat void ca tip returnat;
Destructorul este complementar constructorului. Este o metod care are acelai nume ca i clasa creia i aparine, dar este
precedat de ~. Dac constructorii sunt folosii n special pentru a aloca memorie i pentru a efectua anumite operaii (de exemplu:
incrementarea unui contor al numrului de obiecte), destructorii se utilizeaz pentru eliberarea memoriei alocate de constructori i
pentru efectuarea unor operaii inverse (de exemplu: decrementarea contorului).
58. Cind sunt executate functiile constructor si destructor.
Aa cum vedei, cand un obiect al clasei derivate este creat, constructorul clasei de baz este invocat primul, urmat de constructorul
clasei derivate. Cand obiectul este distrus, destructorul clasei derivate este apelat primul, urmat de destructorul clasei de baz. Altfel
spus, constructorii sunt executai in ordinea derivrii (de la clasa din varful ierarhiei la clasa din baza ierarhiei), iar destructorii sunt
executai in ordinea invers derivrii (de la baza ierarhiei la varf). Aceeai regul se aplic i motenirii multiple.
59. Transmiterea parametrilor spre constructorii clasei de baz.
Trebuie s inelegei c dac clasa de baz implementeaz un constructor cu parametri, atunci toi constructorii clasei derivate
trebuie s invoce acel constructor i s-i transmit argumente, chiar dac constructorul clasei derivate nu ia parametri. Dac clasa de
baz supraincarc mai muli constructori atunci putei alege ce constructor de baz va fi invocat.
Dac nu specificai niciun constructor de baz, atunci va fi apelat constructorul implicit (fr parametri) al clasei de baz (dac exist).
60. Permiterea accesului.
61. Clase de baz virtuale.
ntr-o motenire multipl este posibil ca o clas s fie motenit indirect de mai multe ori, prinintermediul unor clase care
motenesc, fiecare n parte, clasa de baz.
Acest motenire se poate reprezenta printr-un graf aciclic direcionat care indic relaiile dintre sub obiectele unui obiect din clasa
D. Din graful de reprezentare a motenirilor, se poate observa faptul c baza L este replicat n clasa D.
62. Functii virtuale si polimorfism.
O funcie virtual este o funcie care este declarat de tip virtual n clasa de baz i redefinit ntr-o clas derivat. Redefinirea unei
funcii virtuale ntr-o clas derivat domin definiia funciei n clasa de baz. Funcia declarat virtual n clasa de baz acioneaz ca o
descriere generic prin care se definete interfaa comun, iar funciile redefinite n clasele derivate precizeaz aciunile specifice
fiecrei clase derivate.
In esenta, o functie virtuala declarata in clasa de baza actioneaza ca un substitut pentru pastrarea datelor care specifica o clasa
generala de actiunii si declara forma interfetei. Redefinirea unui funtii virtuale intr-o clasa derivata ofera operatiile efective pe care le
executa functia. Altfel spus, o functie virtuala defineste o clasa generala de actiuni. Redefinirea ei introduce o metoda specifica.

Implementarea obiectelor polimorfice se realizeaz prin intermediul functiilor virtuale.


63. Functiile virtuale.
In programarea orientat pe obiecte (POO), o funcie virtual sau metod virtual este o funcie al crei comportament, in virtutea
declarrii acesteia ca fiind "virtual", este determinat de ctre definiia unei funcii cu aceeai semntur cea mai indeprtat pe linia
succesoral a obiectului in care este apelat. Acest concept este o foarte important parte din poriunea de polimorfism a paradigmei de
programare pe obiecte (POO).
64. Atributul virtual este mostenit.
Cand o functie virtuala este mostenita, se mosteneste si natura sa virtuala. O functie ramane virtuala indiferent de cate ori este
mostenita.
Atributul virtual este mostenit: cand o functie virtuala este mostenita se mosteneste si atributul virtual.
65. Functiile virtuale sunt ierarhizate.
Cand o functie este declarata ca fiind virtual intr-o clasa de baza, ea poate fi suprascrisa de o clasa derivata. Totusi, functia nu
trebuie neaparat sa fie suprascrisa. Daca o clasa derivata nu suprascrie functia virtuala, atunci, cand un obiect din acea clasa derivata are
acces la functie, este folosita functia definita de clasa de baza
N.B. Atunci cand o clasa derivata nu suprascrie o functie virtuala, este folosita prima redefinire gasita in ordinea inversa a derivarii.
66. Functii virtuale pure.
O functie virtuala pura este o functie virtuala care nu are definitie in clasa de baza.
virtual tip nume-functie(lista-de-parametri) = 0;
Cand o functie virtuala este construita pura, orice clasa derivata trebuie sa-i asigure o definitie. In cazul in care clasa derivata nu
suprascrie functia virtuala pura, va rezulta o eroare in timpul compilarii.
67. Clase abstracte.
O clasa care contine cel putin o functie virtuala pura se numeste abstracta.
De cele mai multe ori, o funcie declarat de tip virtual n clasa de baz nu definete o aciune semnificativ i este neaprat necesar
ca ea s fie redefinit n fiecare din clasele derivate. O funcie virtual pur este o funcie care nu are definiie n clasa de baz, iar
declaraia ei arat n felul urmtor: virtual tip_returnat nume_functie(lista_argumente) = 0;
O clas care conine cel puin o funcie virtual pur se numete clas abstract.
68. Utilizarea functiilor virtuale.
Una dintre cele mai puternice si mai flexibile cai de introducere a abordarii o interfata, metode multiple este folosirea functiilor
virtuale, a claselor abstracte si a polimorfismului din timpul rularii. Folosind aceste caracteristici, creati o ierarhizare care trece de la
general la specific (de la baza la derivat).
69. Legturi initiale/ulterioare.
Legarea iniial (Early binding) se refer la evenimentele ce au loc in timpul compilrii. Legarea iniial se produce atunci cand
toate informaiile necesare apelrii unei funcii se cunosc in timpul compilrii. Mai simplu, legarea iniial inseamn c un obiect i
apelul funciei se leag in timpul compilrii.
. Avantajul legrii tarzii este flexibilitatea, dar deoarece apelul funciei este determinat la runtime, execuia este puin mai inceat.
70. Sabloanele.
In programarea calculatoarelor, abloanele sunt o caracteristic a limbajului de programare C++ ce permit scrierea de cod fr a lua
in considerare tipul de dat ce va fi utilizat pan la urm. abloanele permit programare generic in C++.
abloanele sunt foarte utile programatorilor in C++, mai ales cand sunt combinate cu tehnica motenirilor multiple i a
supraancrcrii operatorilor. Biblioteca Standard de abloane (STL) a limbajului C++ aduce multe funcii utile intr-un cadru de
abloane conectate.
71. Functii generice.
O funcie generic definete un set de operaii aplicabil mai multor tipuri de dat. Tipul de dat este transmis ca parametru funciei
care va opera asupra acelui tip.
Printr-o funcie generic, o singur procedur (sau set de operaii) poate fi aplicat unui domeniu larg de date. De exemplu,
algoritmul Quicksort este acelai indifferent c opereaz asupra unor intregi (ex: int) sau numere reale (double). Diferena const doar
in tipul datelor. Dup ce ai creat o funcie generic, compilatorul va genera automat codul corect pentru tipul de dat folosit atunci cand
este apelat funcia. O funcie generic este practic o funcie care se supraincarc singur.
72. () functie cu dou tipuri generice.
Instruciunea template accept mai mult de un parametru generic. Parametrii se separ prin virgul. De exemplu:
template<typename T, typename V>
void printCrap(T x, V y)
{ cout << "Printing crap: " << x << ' ' << y << '\n'; }
int main()
{ printCrap(56, "Imi place C++");
printCrap(5690L, 34.67);
return 0; }
Aici compilatorul inlocuiete substituenii T i V cu tipurile int i char*, respectiv, long
i double, atunci cand acesta genereaz instanele specifice ale printCrap() din main().
Observai c am folosit typename. Puteam la fel de bine folosi class.
73. Suprancrcarea explicit a unei functii generice.
Chiar daca o functie sablon se supraincarca singura cand este necesar, puteti sa o supraincarcati si explicit. Daca supraincarcati o
functie generica, atunci ea suprascrie (sau ascunde) functia generica relativ la acea versiune specifica.

#include<iostream.h>
template <class X> void inloc(X &a, X &b) //aceasta surpascrie versiunea genrica a inloc()
void inloc(int &a, int &b)
main()
Putei supraincrca explicit o funcie generic. Aceast supraincrcare se numete
specializare explicit sau specializare template.
74. Restrictii pentru functia generic.
O prima restrictie legata de functiile template este aceea ca in lista de argumente formale trebuie sa apara toate tipurile generice
specificate in prefixul template
A doua restrictie legata de functiile template este aceea ca ele vor fi apelate doar in cazul in care tipurile parametrilor actuali se
potrivesc perfect cu cele ale parametrilor formali. Cu alte cuvinte, la apelul functiilor template nu se fac nici un fel de conversii ale
parametrilor.
75. Aplicarea functiilor generice.
76. () sortare generic.
77. Clase generice.
Clasele colecii conin obiecte de un tip particular (de exemplu o list inlnuit de intregi sau un tablou de structuri. Se pot defini
familii de clase colecii, membrii acestora diferind numai prin tipul elementelor.
Familia de clase poate fi reprezentat printr-o clas generic (parametrizat). Aceasta specific modul in care pot fi construite clasele
individuale, care se deosebesc numai prin tipul elementelor pe care le conin.
78. Un exemplu cu dou tipuri de date generice.
O clas generic se reprezint astfel:
template <list_argumente_generice> declarare_clas;
Instanierea unei clase generice se face prin:
nume_clas <list_argumente_concrete> nume_obiect;
Definim clasa generic (parametrizat):
template <class T>
class Array{
public:
Array(int d=10): a(new T[dim]), dim(d){}
~Array(){delete a;}
private:
T *a;
int d; };
79. Mediul Builder.
C++Builder este un mediu de dezvoltare rapid a aplicaiilor produs de filiala CodeGear a Embarcadero Technologies pentru
scrierea programelor n limbajul de programare C++. C++Builder combin biblioteca de componente vizuale i un IDE scris n Delphi,
cu un compilator C++. Ciclul de dezvoltare este n aa fel nct Delphi primete primul mbuntiri semnificative, urmat de C+
+Builder. Majoritatea componentelor dezvoltate n Delphi pot fi folosite n C++Builder fr modificri, dar nu i invers.
80. Extinderea IDE Builder a clasei : proprietti si evenimente.
A. Propieti, metode, evenimente .Dezvoltarea rapid a aplicaiilor inseamn suport pentru propietile, metodele i
evenimentele obiectelor (PME). Propietile permit setarea uoar a caracteristicilor componentelor. Metodele execut aciuni asupra
obiectelor. Evenimentele permit ca aplicaia s rspund la mesajele Windows, sau la schimbri de stare a obiectelor.
Folosirea modelului PME furnizeaz un robust i intuitiv mediu de dezvoltare pentru
aplicaiile Windows.
B. C++Builder Help Mediul C++Builder ofer un ghid practic, care conine peste 3000 de pagini de documentaie despre IDE,
VCL, baze de date i tehnici de programare.
C. Codurile surs pentru VCL Mediul C++Builder pune la dispoziie codurile surs pentru VCL - Visual Component Library,
furnizand astfel o unic privire inuntrul modului in care lucreaz C++Builder. VCL furnizeaz peste 100 de componente reutilizabile
care ajut
programatorul s construieasc aplicaii robuste intr-un timp scurt. Aceste componente pot fi modificate pentru a corespunde
necesitilor din cele mai diverse. C++Builder-ul incude o suit complet de controale Windows95: TreeView, Trackbars, ProgressBars,
toolbars, Rich Edit, ListViews, ImageLists, StatusBars etc. Totodat C++Builder include suport pe 32 de bii pentru numele lungi de
fiiere, multi-threading i Win95 API.
81. Paleta de obiecte Builder.
Componentele sunt elemente utilizate pentru a crea aplicaii C++Builder. O component este de fapt un element de tip UI (user
interface). Pot fi vizuale (de exemplu butoanele, cutiile de dialog), sau pot fi non-vizuale (de exemplu timer-ul). Componentele sunt
grupate in pagini. In forma implicit paginile sunt: Standard,
Win95, Additional, Dat Access, Data Control, Win31, Internet, Dialogs, System, QReport, ActiveX . figura 1.6 De exemplu cele mai
folosite componente sunt cele din pagina Standard, care conine cutii de dialog, meniuri, butoane etc. Pentru a obine help despre fiecare
dintre ele

Mediul Builder.IDE Builder.


C++Builder este un mediu de dezvoltare rapid a aplicaiilor produs de filiala CodeGear a Embarcadero Technologies pentru
scrierea programelor in limbajul de programare C++. C++Builder combin biblioteca de componente vizuale i un IDE scris in Delphi,
cu un compilator C++. Ciclul de dezvoltare este in aa fel incat Delphi primete primul imbuntiri semnificative, urmat de C+
+Builder. Majoritatea componentelor dezvoltate in Delphi pot fi folosite in C++Builder fr modificri, dar nu i invers. C++Builder
include unelte care permit dezvoltarea vizual bazat pe drag-and-drop,fcand programarea mai facil prin implementarea unui GUI
builder WYSIWYG in IDE.
IDE-ul C++Builder este mprit n trei pri. Fereastra superioar poate fi considerat partea principal a IDE-ului. Pe lng
meniul principal ea conine i bara de butoane cu cele mai folositeoperaii n stnga i selectorul de componente utilizabile n dreapta.
Pentru o mai uoar regsire, componentele sunt mprite n tipuri de componente, fiecare tipavnd un tab n paleta de
componente. Pentru a utiliza o component, este suficient s o selectmn palet dup care s dm click pe forma pe care dorim s
amplasm componenta, la poziiadorit.O component este o bucat de cod software care va ndeplini n aplicaie o anume
funcie predefinit (cum ar fi o etichet, un cmp de editare sau o list).Cea de-a doua parte a IDE-ului C++Builder este inspectorul de
obiecte (Object Inspector) careeste amplasat n mod implicit n stnga ecranului. Prin intermediul inspectorului de obiecte vommodifica
proprietile componentelor i modul cum sunt tratate evenimentele referitoare la ele
(interaciunile utilizatorului cu componenta respectiv
82. Mediul Builder. Meniul, ferestrele de lucru.
MAIN MENU
File pentru a deschide, crea, salva, inchide project-uri i fiiere;
Edit pentru prelucrare de texte i componente
View pentru a afia, sau ascunde elemente ale mediului;
Project pentru a compila o aplicaie;
Run
Component pentru a crea sau a instala o component.
DataBase pentru manipulare de baze de date.
Workgroups pentru manipularea proiectelor mari.
Tools pentru a rula programele utilitare disponibile, fr a prsi mediul C++Builder;
Options pentru a controla comportamentul mediului de dezvoltare;
Help pentru a obine ajutor in diversele faze de utilizare a mediului
Forma
Intreaga parte vizibil a unei aplicaii este construit pe un obiect special numit form(ca cea din figura 1.2). O form liber este creat
de fiecare dat cand este lansat in execuie mediul C++Builder. O aplicaie poate avea mai multe forme. Adugarea de noi forme unei
aplicaii se face selectand comanda New Form din meniul File. Pe form se pot aeza i aranja componente vizulale i non-vizuale care
alctuiesc interfaa cu utilizatorul. Fiecrei forme ii sunt asociate dou fiiere cu exensiile .cpp respectiv .h (in cazul formei de mai sus
unit1.cpp i unit1.h)
Editorul de cod
Mediul C++Builder are o fereastr unde programatorul poate scrie codul unei aplicaii. Editorul de cod este un editor ASCII complet i
poate deschide mai multe fiiere simultan.
Bara cu instrumente Aceasta reprezint o scurttur la comenzile aflate in MainMenu.
Tabelul cu proprieti ale obiectelor Acest tabel (Object Inspector) care face legtura intre interfaa aplicaiei i codul scris de
programator are dou funcii:
seteaz propitetile componentelor aflate in form.
creeaz i ajut la navigatul prin handler-ele de evenimente. Un handler de evenimente se execut in Object Selector In captul de sus
al lui se afl Object Selector care conine toate componentele de pe form impreun cu tipul lor.
83. Mediul Builder.Componente, proprietti.
84. Mediul Builder. Evenimente, module.
Pagina evenimentelor(Events) a inspectorului obiectelor arat lista evenimentelor determinate de component(programarea pentrru
sistemele de operare cu interfa grafic a utilizatorului,in special,pentru Windows 95 sau Windows NT i presupune descrierea reaciei
aplicaiei la anumite evenimente, pe cind insi sistemul de operare se ocup de interogarea computer-ului cu scopul determinrii dac
se realizeaz un eveniment).Fiecare component are un set propriu de procesare a evenimentelor. In C++ Builder este nevoie de a scrie
funcii ce proceseaz evenimentele i corelarea evenimentelor cu aceste funcii.In procesul crerii a astfel de procesoare de un anumit
tip se oblig programul s realizeze funcia scris, dac
se va realiza evenimentul dat. Fiecare componaneta are evenimentele sale posibile.
85. Mediul Builder exemple de utilizare a componentelor: Form.
86. Proiectarea BD.
Metodologia de proiectare, consta intr-o abordare structurata, in care se utilizeaza proceduri, tehnici, instrumente si documentatii,
pentru a sustine si facilita procesul de proiectare. O metodologie de proiectare consta in mai multe faze, continand etape care indruma
proiectantul in alegerea tehnicilor adecvate fiecarei etape a proiectului; de asemenea il ajuta la: planificare, administrare, control si
evaluarea proiectelor de dezvoltare a bazelor de date. In final are loc o abordare structurata de analiza si modelare a unui set de cerinte
privind BD, intr-o maniera standardizata si organizata.
Metodologia de proiectare a BD, consta din trei faze principale:
- Proiectarea conceptuala a BD
- Proiectarea fizica a BD

- Proiectarea logica a BD
Cererea in C++ Builder este un obiect care reprezint o colecie de date. De obicei
pentru crearea unei cereri se utilizeaz componenta TQuery urma al clasei abstracte TDataSet.
87. Utilizarea componentelor: Form, TQRBand, QuickReport, TDataSource, TTable, TField,TBDGrid, TQuery, SQL
Explorer.
Form.Ea este utilizata pentru suport a obiectelor ce sunt create pe ea. Formele pot fi de diferite tipuri (parinte, copil), si create in
moduri diferite. Toate C + + Builder formularele sunt definite intr-o clas C + +, ceea ce inseamn cacestea sunt obiecte in msura in
care cererea dumneavoastr este in cauz. Pentru ca sunt obiecte, avei control asupra a ceea ce atributele i metodele care le
conin.Acest lucru inseamn c putei trata un C + + Builder form ca in cazul in care s-auorice alt exemplu C + + obiect, adugand
metode i atribute pentru a se potrivinevoilor dumneavoastr. Folosind tehnicile pe care le vom acoperi, putei creteeficiena codul
dumneavoastr prin meninerea central attribute i obiecte care vor fi utilizate pe parcursul cererii dumneavoastr. In continuare, s ne
uitm la cazul in care pentru a stoca aceste informaii i cateva modaliti pentru a ajunge la ea.
TQRBand - componenta, care este parte a raportului - un container de date (de exemplu, titlul
raportului, in partea de sus sau de jos a paginii antet titlu coloane sau notele de subsol ale grupului, etc.) Componentele sunt tiprite cu
TQRBand in funcie de tipul lor in locurile corespunztoare din raport, indiferent de poziia lor relativ peformular.Caracteristica cea
mai utilizat de aceast component - BandType, de tip"bar" (stranitsyili banda de subsol, "trupa" de date, etc). Valori posibile: rbTitleraporttitlu, rbPageHeader antetul paginii, rbColumnHeader-antetul de coloan intr-un raport multicolumn, rbDetail - polosas tabelare
de date (repetat ori de cate ori exist randuri vnabore baza de date avlyayuschemsya de raport), rbPageFooter - kolontitulstranitsy mai
mici, rbOverlay - de fundal a paginii este tiprit in colul dinstanga sus kazhdoystranitsy, rbGroupHeader - un antet de grup,
rbSubDetail -"benzi" de date tabelare pentru Detaliu-mas, rbGroupFooter - kolontitulgruppy mai mici, rbSummary tiprite la
sfaritul raportului). Domeniul imobilier BandTypecomponent sozdannogonami atribui valoarea rbTitle.
QuickReport este un set de componente i a controalelor, care permite rapoarte s fie proiectate i previzualizate in Delphi i
C + + Builder IDEuri. Aplicatii inclusiv funcionalitatea Quickreport pot fi apoi utilizate free.
Componenta DataSource acioneaz in calitate de mediator intre componentele TDataSet (TTable, TQuery, TStoredProc) i
componentele Data Controls elemente de dirijare care asigur reprezentarea datelor in formular. Componentele TDataSet dirijeaz
legturile cu biblioteca Borland Database Engine (BDE), iar componente DataSource dirijeaz legturile cu datele din componentele
Data Controls.
Cea mai simpl metod de adresare la tabelele bazelor de date este cu utilizarea componentei TTable, care permite accesul la
un tabel. Pentru aceasta cel mai des utilizm urmtoarele proprieti: Active, DatabaseName, TableName, Exclusive, ReadOnly.
Componenta TDBGrid asigur metoda de afiare pe ecran a randurilor de date din
componentele TTable i TQuery sub form de tabel. Aplicaia poate s utilizeze TDBGrid pentru afiare, includere, nimicire, redactare a
datelor BD. De obicei DBGrid se utilizeaz in combinaie cu DBNavigator, dei pot fi utilizate i alte elemente de interfa, incluzand in
procesoarele lor de evenimente metodele First, Last, Next, Ptior, Insert, Delete, Edit, Append, Post, Cancel a componentei TTable.
Ca i in cazul componentei TTable, componenta TDataSource gestioneaz cu
interaciunea dintre componentele Data Controls i componenta TQuery. De obicei
aplicaia are cate o component DataSource pentru fiecare component TQuery.
Active,Eof, DatabaseName, DataSource, Fields, Params, SQL
SQL Explorer este un instrument la indeman atunci cand se lucreaz cu baze de date. Pentru a incepe, selectai baza de date
meniu / Exploreaza sau de a rula ca o aplicaie independent. In stanga paginii Explorer panoul de Bazele de date suntprezentate ca lista
dropdown de toate proprietile enumerate in pseudonime de configurare BDE fiier. In panoul din dreapta, avei posibilitatea s
vizualizaiconinutul tabelelor, intra i a executa SQL-interogare de la mas i de a obine informaii despre baza de date alias (driver de
baze de date, locaia, limba folositde ctre conductorul auto i ali parametri coninute in BDE fiierul de configurare),informaii
despre tabelele (tipul de tabela, versiune, data ultimei
actualizri, etc) i,dac este necesar, s le modifice.