Sunteți pe pagina 1din 16

1.

INTRODUCERE N C++
Exista limbaje concepute strict pe baza conceptelor programrii orientate pe obiecte (POO), de
exemplu Simula sau Smalltalk. O alt abordare este de a aduga unor limbaje cu o popularitate bine
stabilit, de exemplu Pascal si C, elementele tehnicii programrii orientate pe obiecte.
C++ combin avantajele oferite de limbajul (eficien!, flexibilitate "i popularitate) cu
avantajele oferite de tehnica POO (Programrii Orientate pe Obiecte). #e"i adopt principiile POO, $
$ nu impune aplicarea lor strict (se pot scrie programe fr elemente POO). onceptul fundamental %n
$$ este clasa.
$$ este o extensie a limbajului , creat de &jarne 'troustrup. ea mai important extensie pe
care aceasta a fcut(o limbajului su s(a produs %n momentul introducerii claselor.
lasele reprezint o extensie a structurilor din . u acestea, programatorul %"i poate crea tipuri
de date complexe, ce cuprind at)t datele c)t "i opera!iile ce ac!ioneaz asupra acestora.
*ariabilele create din clase se numesc obiecte, iar programarea utiliz)nd aceste concepte,
programare orientat pe obiecte (Object Oriente Programming!.
um este "i firesc, $$ posed toate capacit!ile limbajului . +n plus utiliz)nd clasele, se pot
dezvolta programe de un de un %nalt grad al complexit!ii. ,ipurile definite prin clase pot fi integrate %n
programe aproape la fel de u"or ca %n cazul structurilor.
1.1. Ce e"te programarea orientat pe obiecte #
Programarea orientat pe obiecte (OOP) este o nou cale de abordare a programrii.
-odalit!ile de programare s(au schimbat imens de la inventarea calculatorului, %n primul r)nd pentru a
se acomoda cre"terii complexit!ii programelor. #e exemplu, la %nceput, c)nd au fost inventate
calculatoarele, programarea se fcea introduc)ndu(se instruc!iuni %n ma"ina de cod binar cu ajutorul
panoului frontal al calculatorului. .cest lucru a fost convenabil at)t timp c)t programele aveau doar
c)teva sute de instruc!iuni. O dat cu mrirea programelor, au fost inventate limbajele de asamblare,
astfel %nc)t programatorii se puteau descurca cu programe mai mari, cu complexitate crescut, folosind
reprezentarea simbolic a instruc!iunilor pentru ma"in. #eoarece programele continuau s creasc, au
fost introduse limbajele de nivel %nalt care ofer programatorului mai multe unelte cu care s fac fa!
complexit!ii. Primul limbaj larg rsp)ndit a fost, desigur, /O0,0.1. hiar dac el a fost un prim pas
foarte impresionant, este departe de a fi un limbaj care %ncurajeaz programe clare, u"or de %n!eles.
.nii 234 au dat na"tere programrii structurate. .ceasta este metoda %ncurajat de limbaje
precum sunt "i Pascal. 5tilizarea limbajelor structurate face posibil scrierea destul de u"oar a unor
programe relativ complexe. ,otu"i, chiar folosind metodele programrii structurate, un proiect nu mai
poate fi controlat odat ce atinge anumite mrimi (adic odat ce complexitatea sa o dep"e"te pe cea
pe care o poate controla un programator).
6ua!i %n calcul c pentru fiecare realizare din dezvoltarea programrii au fost create metode care
s permit programatorului s se descurce cu complexitate crescut. 6a fiecare pas al drumului noua
abordare a preluat cele mai bune elemente ale metodelor anterioare "i a continuat drumul. .stzi multe
proiecte sunt aproape sau %n punctul %n care programarea structurat nu mai face fa!. Pentru a rezolva
aceast problem, a fost inventat programarea orientat pe obiecte.
Programarea orientat pe obiecte a preluat cele mai bune idei ale programrii structurate "i le
combin cu mai multe concepte noi, mai puternice, care %ncurajeaz abordarea programrii %ntr(un mod
nou. +n general, c)nd se programeaz %n modul orientat pe obiecte, o problem este %mpr!it %n
subgrupe de sec!iuni %nrudite, care !in seama at)t de codul c)t "i de datele corespunztoare din fiecare
grup. .poi, se organizeaz aceste subgrupe %ntr(o structur ierarhic. +n sf)r"it, subgrupele se
transform %n unit!i de sine stttoare numite obiecte.
,oate limbajele de programare orientate pe obiecte au trei caracteristici comune7 %ncapsularea,
polimorfism "i mo"tenire.
ncap"$%area
+ncapsularea este un mecanism care leag mpreun cod i date i le pstreaz pe ambele n
siguran fa de intervenii din afar i de utilizri greite. -ai mult, ncapsularea este cea care
permite crearea unui obiect. 'pus simplu, un obiect este o entitate logic ce ncapsuleaz att date ct
i cod care manevreaz aceste date. +ntr(un obiect o parte din cod "i8sau date pot fi particulare acelui
obiect "i inaccesibile pentru orice din afara sa. +n acest fel, un obiect dispune de un nivel semnificativ
de protec!ie care %mpiedic modificarea accidental sau utilizarea incorect a pr!ilor proprii obiectului
de ctre sec!iuni ale programului cu care nu are legtur.
+n cele din urm, un obiect este o variabil de un tip definit de utilizator. 6a %nceput poate s
apar ciudat ca un obiect, care leag at)t cod c)t "i date, s fie considerat ca fiind o variabil. ,otu"i, %n
programarea orientat pe obiecte a"a stau lucrurile. )nd se define"te un obiect, implicit se creaz un
nou tip de date.
Po%imor&i"m
6imbajele de programare orientate pe obiecte admit polimorfismul, care este caracterizat prin
fraza 9o interfa!, metode multiple:. -ai clar, polimorfismul este caracteristica ce permite unei
interfe!e s fie folosit cu o clas general de ac!iuni. .c!iunea specific selectat este determinat de
natura precis a situa!iei. 5n exemplu din practica zilnic pentru polimorfism este un termostat. 1u are
importan! ce combustibili este utilizat pentru %nclzirea casei (gaze, petrol, electricitate, etc.)
termostatul lucreaz %n acela"i fel. +n acest caz, termostatul (care este interfa!a) este acela"i indiferent
de combustibil (metod). #e exemplu, dac temperatura dorit este de ;; de grade, se va regla
termostatul la ;; de grade. 1u are importan! combustibilul care produce cldura. .cela"i principiu de
poate aplica "i programrii. #e exemplu, se poate implementa un program care define"te trei tipuri de
memorie stiv. 5na este folosit pentru valori %ntregi, una pentru valori tip caracter "i una pentru valori
%n virgul mobil. #atorit polimorfismului se pot crea trei perechi de func!ii numite p$"'(! "i pop(! <
c)te una pentru fiecare tip de date. onceptul general (interfa!a) este cel de a introduce "i de a scoate
date dintr(o memorie stiv. /unc!iile definesc calea specific (metoda) care se folose"te pentru fiecare
tip de date. )nd se introduc date %n memoria stiv, tipul de date va fi cel care va determina versiunea
particular a lui p$"'(! care va fi apelat.
Primele limbaje de programare orientate pe obiecte au fost interpretoarele, astfel %nc)t
polimorfismul a fost admis, desigur, %n timpul rulrii. #ar $$ este un limbaj de compilare. .stfel, %n
$$, polimorfismul este admis at)t %n timpul rulrii c)t "i %n timpul compilrii.
(o)tenirea
otenirea este procesul prin care un obiect poate s preia prototipul altui obiect. .cest lucru
este important deoarece se admite conceptul de clasificare. #ac v g)ndi!i pu!in, majoritatea
cuno"tin!elor despre lumea %nconjurtoare sunt accesibile deoarece sunt clasificate ierarhic. #e
exemplu, un c)ine ciobnesc face parte din clasa cine, care la r)ndul su face parte din clasa mamifere
care se afl %n marea clas animale. /r utilizarea claselor, fiecare obiect ar trebui definit explicit)ndu(
se toate caracteristicile sale. +ns, prin folosirea clasificrilor, un obiect are nevoie doar de definirea
acelor calit!i care %l fac unic %n clasa sa. -ecanismul mo"tenirii este acela care face posibil ca un
obiect s fie un exemplar specific al unui caz mai general.
1.*. E+ten"ii%e C++
,oate elementele limbajului sunt valabile "i %n $$= atribuiri, bucle &or, ,'i%e- o ,'i%e,
instruc!iunile i&- ",ic'- func!ii, variabile, structuri. 'tandardul limbajului este .N/I C- iar $$
include "i aceast standardizare .
Elemente noi pe care $$ le aduce pot fi grupate %n trei categorii7
( e+ten"ii %a ni0e% e %imbaj
( e+ten"ii pri0in o tratare "$perioar a tip$ri%or definite de utilizator.
( cele care ating nivelul programrii orientate pe obiecte7
> clasele ! permit gruparea datelor si opera!iilor %ntr(un acela"i tip de date, %n vederea
ob!inerii obiectelor=
> controlul accesului ! accesul la elementele interioare unei clase este selectiv=
> clasele derivate ! se ob!in mo"teniri sau reutilizri ale claselor existente, fiind
posibil extinderea lor %n diferite aplica!ii=
> funciile virtuale ! constituie un mecanism mult mai puternic de apelare a
func!iilor, acestea determin)ndu(se %n momentul execu!iei programului si nu %n cel al
compilrii=
> prietenii ! permit accesul ctre elemente interzise=
> constructorii ! rutine pentru ini!ializarea obiectelor=
> destructorii ! rutine pentru distrugerea obiectelor.
.nimale
-amifere Psri
)ini
ibnesc
*. 1UND.(ENTE2E 2I(3.4U2UI C++
*.1. C$0inte%e c'eie 5n C++
+n plus fa! de cele ?; de cuvinte ( cheie ale limbajului , standardul .1'@ propus pentru $$
adaug %nc ?4. .ceste cuvinte < cheie sunt prezentate %n continuare7

*.*. Tip$ri e ate &$namenta%e
"ipurile fundamentale ale limbajului $$ sunt urmtoarele7
char, reprezent)nd tipul caracter, pe octet,
int, %ntreg pe ; octe!i ,
long %ntreg pe A octe!i,
float, %nsemn)nd un numr real pe octe!i
double, ata"at unui numr real pe B octe!i.
.ceste tipuri fundamentale admit diferite variante, numite tipuri de baz de date.
,ipurile de baz ale limbajului $$ sunt prezentate %n tabelul urmtor7
,ip 1r. octe!i #omeniu de valori
signed char C (C;B.. .C;D
unsigned char C 4...;EE
char C (C;B... C;D
short, short int ; (?;D3B... ?;D3D
signed short ; (?;3DB... ?;D3D
asm inline staticFcast
bool mutable template
catch namespace this
class neG throG
constFcast operator true
delete overload trH
dHnamicFcast private tHpeid
explicit protected using
false public virtual
friend reinterpretFcast GcharFt
unsigned short ; 4... 3EE?E
unsigned short int ; 4... 3EE?E
int, signed int ; (?;3DB... ?;D3D
unsigned int ; 4... 3EE?E
long, long int A (;CADAB?3AB...;CADAB?3AD
signed long A (;CADAB?3AB.. .;CADAB?3AD
signed long int A (; C ADAB?3AB. . .;C ADAB?3AD
unsigned long A 4... A;IAI3D;IE
unsigned long int A 4... A;IAI3D;IE
float A ?.AE(?B...?.AE$?B
double B C.DE(?4B...C.DE$?4B
long double C4 ?.AE(AI?;...C.CE$AI?;
*.6. Tip$ri eri0ate
Pornind de la tipurile de baz, putem ob!ine diverse tipuri derivate. ,ipurile derivate acceptate
de $$ sunt7
> pointeri,
> referin!e,
> masive,
> enumerri,
> structuri, uniuni si clase,
> constante.
*.6.1. Pointeri
*ariabila este o locaie de memorie care poate gzdui un obiect, ales dintr(o mulime
prestabilit de obiecte, manevrat %n cadrul unui program. -ul!imea este domeniul de defini!ie al
variabilei, iar loca!ia este o zon de memorie capabil s memoreze orice valoare din domeniul de
defini!ie.
0eferirea la o variabil se realizeaz prin7
> utilizarea identificatorilor,
> expresiile indexate,
> expresiile selectoare (de tipul lui nume.c)mp unde nume este o variabil complex),
> expresiile referin!e.
/olosirea exact a numelui simbolic necesit cunoa"terea echivalentelor acestuia pe nivelul
conceptual "i cel al implementrii.
onceptual, leg)nd no!iunea de variabil de existen!a unei loca!ii de memorie, apare o dubl
ipostaz a variabilei7 cea de pstrtoare de date si cea de data %ns"i, deoarece identificarea loca!iei
printre celelalte reprezint o informa!ie si, implicit, o dat.
6a nivelul implementrii, unei variabile %i corespunde o zon din memoria calculatorului.
5nei variabile %i corespund dou valori7
> st)ng (l(value), dat de adresa zonei de memorie (referin!),
> dreapt (r(value), valoarea memorat %n zona respectiv
+n cazul tablourilor, se va memora si un descriptor ("ablon al elementelor memorate %n acesta).
*.6.*. Re&erin7e
+n programele , pointerii constituie o legtur %ntre diferite variabile. +n $$ exist o a doua
cale de a fi %n legtur cu o variabil, "i anume prin intermediul referin!elor. 0eferin!ele, ca "i pointerii,
con!in adrese. 'pre deosebire de pointeri, %n a cror declarare era utilizat simbolul 9JK, pentru a defini o
referin! vom folosi simbolul 9 L K.
int i; // Declararea unui intreg
int *p =&i; // Definirea unui pointer la i
int &r = i; // Definirea unei referinte la i
.t$nci c8n acce"m o 0ariabi% prin intermei$% re&erin7ei- n$ e"te nece"ar $ti%i9area are"ei-
acea"ta rea%i98n$:"e a$tomat.
+n exemplul urmtor, at)t p, c)t "i r ac!ioneaz asupra lui i.
l < value r < value
@dentificator
int i,j=
int Jpi=
Li C4
id M i
Lj
id M j
Lpi
id M pi
i=55; // actiune asupra lui i
*p=13; // actiune asupra lui i
r=20; // actiune asupra lui i
Exist %ns o diferen! major %ntre p si r, nu numai %n modul de apelare, ci "i datorit faptului
c p poate, la un moment dat, s fie %n legtur cu o alt variabil, a crei loca!ie de memorie o va
con!ine, diferit de cea a lui i, %n timp ce r nu %"i poate schimba referin!a, acesta nefiind altceva dec)t
o redenumire (alias) a variabilei i.
+n ceea ce prive"te utilizarea referin!elor, va trebui s !inem cont de urmtoarele restric!ii7
> referin!ele trebuie ini!ializate chiar %n momentul declarrii lor,
> odat ini!ializate, referin!elor nu li se pot schimba loca!iile la care se refer, "i
> nu sunt permise referinte la referin!e si pointeri ctre referin!e, dar putem avea o referin! la
un pointer
toate acestea nefiind altceva dec)t consecin!e fire"ti ale faptului c o referin! este o adres ce nu
poate fi schimbat.
0eferin!ele pot fi utilizate drept constante, pot fi ini!ializate cu constante, func!ii sau chiar structuri.
Tran"miterea parametri%or prin re&erin7
+n limbajul , to!i parametrii sunt transmi"i prin valoare. .dic, fiecrei func!ii %i sunt pasate
valorile efective ale parametrilor. #e aceea %n este de preferat s utilizm pointeri ca parametri. Prin
folosirea parametrilor formali referin!, se permite realizarea transferului prin referin! (transmiterea
adresei) de o manier similar celei din Pascal (cu parametrii *.0). 'e elimin astfel necesitatea
recurgerii la artificiul din , adic utilizarea parametrilor formali pointeri, %n cazul %n care modificrile
fcute %n interiorul func!iei asupra parametrilor trebuie s ram)na "i dup revenirea din func!ie.
#$emplu%
void interschimba!"int *pa# int *pb$ % //varianta pentru !
int au&=*pa; *pa=*pb; *pb=au&;
'
void interschimba!pp"int &a# int &b$ %
int au&=a; a=b; b=au&;
'
//apel
int a=(#b=5;
interschimba!"&a#&b$;
interschimba_Cpp(a,b);
,ransferul prin referin! este util "i atunci c)nd parametrul are dimensiune mare ("tr$ct, class)
"i crearea %n stiv a unei copii a valorii ar reduce viteza de execu!ie si ar %ncrca stiva, mai performant
fiind transmiterea prin referin!= problema incrcarii stivei trebuie analizat mai ales %n cazul
programelor recursive.
Pentru a se putea face o compara!ie %ntre modul de transmitere al parametrilor prin valoare,
respectiv prin referin! s(a considerat urmtorul exemplu %n care, %n cadrul func!iei urmtoare, t este
transmis prin referin!, prin intermediul unui pointer, iar " prin valoare.
void copia)a1 "int *t# int s$
% *t=s; '
5tilizarea pointerilor pentru a ob!ine apelul de referin! pare oarecum artificial. +n $$ putem
s utilizm chiar argumente de tip referin!. 5n astfel de argument este un parametru al crui tip este
referin! ctre o variabil. O alt variant pentru func!ia anterioar este urmtoarea7
void copia)a2 "int &t#int s$
% t=s; '
+n aceast variant, t este un parametru de tip referin!.
Exist diferen!e %ntre apelul cu pointeri "i apelul cu referin!e, %n cel din urm caz fiind utilizat
operatorul de aparen! 9 .: "i nu 9 (N:, ca %n cazul pointerilor. &inen!eles c putem utiliza oricare dintre
cele dou metode, dar se pare c func!iile utiliz)nd referin!ele sunt mai clare la apelare.
int i ;
copia)a1 "&i# 25$ ; // *e transmite adresa lui i
copia)a2 "i# 25$ ; // +u se mai transmite adresa
Ret$rnarea e re&erin7e
O interesant aplica!ie a referin!elor const %n utilizarea acestora la ie"irea din func!ii "i
returnarea lor %n locul tipurilor cunoscute. ' considerm, mai %nt)i, un exemplu %n care o func!ie
returneaz tipul referin!. 5rmtoarea func!ie preia un "ir de caractere "i returneaz o copie a celui de al
n <lea element al su.
char element "char *s# int n$
% return s,n-; '
Putem utiliza func!ia de mai sus %n urmtorul context7
char c ;
char *s=./orland !00.;
c=element "s#1$;
&unc!ia e%ement(! poate fi extins %n vederea verificrii dimensiunii vectorului "i evitarea
utilizrii unui index %n afara domeniului permis. +n plus, deoarece returnm numai o copie a celui de al
n(lea caracter, nu putem modifica valoarea acestuia "i actualiza "irul de caractere. #e exemplu, codul
urmtor
char c;
char *s=./orland !00.;
c=element"s#1$;
c=232;
nu modific pe " %n 9&orland .$$:, deoarece c este doar o copie a celui de al B(lea element a lui " "i nu
ac!ioneaz asupra acestuia. Putem corecta aceast situa!ie prin modificarea valorii returnate a func!iei.
char *element"char *s#int n$
%return &s,n-;'
iar acum putem scrie
char *c;
char *s=./orland !00.;
c=element "s#1$;
*c=232; // re)ult4 s=./orland 300.
Putem folosi urmtoarea variant7
*element "s#1$=232;
Exist o variant chiar mai elegant. +n locul returnrii unui pointer, vom returna o referin!.
.cest proces este ilustrat %n figura urmtoare.
/unc!ia e%ement(! rescris utiliz)nd tipul referin! pentru valoarea de retur este prezentat %n
continuare7
char &element "char *s# int n$
% return s,n-; '
5
element "s#1$=232;
u toate c instruc!iunea de revenire pare s transmit o copie a celui de al n(lea element al
"irului, datorit faptului c tipul returnat este o referin!, putem asigna o valoare rezultatului func!iei,
ac!iune actualiz)nd "irul transmis ca parametru efectiv, a"a cum am vzut mai %nainte.
*.6.6. (a"i0e
-asivele de date sau tablourile, din r)ndul crora provin vectorii si matricile, sunt tipuri de date
foarte apropiate pointerilor si referin!elor. *om vedea c orice opera!ie care poate fi rezolvat prin
indexarea tablourilor poate fi rezolvat si cu ajutorul pointerilor. *ersiunea cu pointeri va fi, %n general,
mai rapid dar, pentru %nceptori, mai greu de %n!eles imediat. .stfel, declara!ia
char a,10-;
#efine"te 9a: ca fiind un "ir de B4 de caractere si, %n acela"i timp, 9a: va constitui un pointer la
caracter. #ac pc este un pointer la un caracter, declarat prin
char *pc;
,ipul returnat7 Operatorul referin!
char &
char &element"char *s#int n$
%
return s ,n- ;
'
6eturnea)4 adresa lui s,n-
atunci atribuirea
pc=&a,0-;
face ca pc s refere primul element al tabloului linie (de indice zero)= aceasta %nseamn c pc con!ine
adresa lui aO4P. .cum, atribuirea
char c=*pc;
va copia con!inutul lui a,0- %n c.
#in moment ce numele unui tablou este sinonim cu loca!ia elementului su zero, asignarea
pc=&a,0-;
poate fi scris "i
pc=a;
Evalu)nd elementul a,i-# $$ %l converte"te %n *"a0i$# cele dou forme fiind echivalente.
.plic)nd operatorul & ambilor termeni ai acestei echivalen!e, rezult c &a,i- este identic cu a0i;
a0i fiind, deci, adresa elementului i din tabloul a. 0eciproc7 dac pc este un pointer, el poate fi utilizat
%n expresii cu un indice, pc,i- fiind identic cu *"pc0i$7
*.6.;. En$merri
,ipurile enumerate sunt introduse prin sintaxa
enum nume %membrul#membru2#777' var1# var2#777;
#e exemplu,
enum !89:6; %6:*8#<=6D=#39/3*>68' culoarepunct#culoarelinie;
enum !89:6; penita# culoarefond;
define"te tipul de date !89:6; si declar variabilele culoarepunct si culoarelinie, urmate
de declarrile a %nc dou variabile, penita si culoarefond.
+n limbajul $$, numele ce urmeaz cuv)ntului enum este chiar numele tipului de dat "i nu o
etichet de tip, a"a cum se %nt)mpl %n limbajul . #eci, dac nu exist riscul apari!iei confuziilor, este
permis a se declara variabile "i prin sintaxa urmtoare7
!89:6; cerneala;

-embrii unui tip enumerat sunt numai de tip %ntreg. *aloarea fiecruia este ob!inut prin
incrementarea cu C a valorii membrului anterior, primul membru av)nd, implicit, valoarea 4. Este
permis ini!ializarea unui membru cu o valoare oarecare, av)ndu(se %n vedere c doi membri ai
aceluia"i tip nu pot avea aceea"i valoare. *alorile membrilor urmtori se vor stabili conform regulilor
men!ionate.
enum 3+:>;?@ %;36+3=1# @6;?3<363# <363# >:3?+3';
enum /::9=3+ "fals#adevarat' conditie;
enum D;6=!>;= %8@#D:A+#6;BC>#9=D>#+:+==0'; // ilegal
#e asemenea, putem defini tipuri enumerate fr a specifica numele acestora. Proced)nd astfel, putem
grupa un set de constante fr a denumi acea mul!ime.
enum %bine#foartebine#celmaibine';
+n ceea ce prive"te utilizarea variabilelor de tip enumerat, at)t limbajul , c)t si $$ permit atribuiri de
tipul conditie=0, dar, $$ fiind mult mai orientat pe tipul de data, acest tip de atribuiri genereaz
avertismente din partea compilatorului. #e aceea este bine ca astfel de atribuiri s fie %nso!ite de
conversia de tip corespunztoare.
conditie=fals;
conditie="enum /::9=3+$ 0;
Observa!ie7 Enumerrile definite %n interiorul structurilor $$ nu sunt vizibile %n afara acestora. Prin
structuri, ne referim at)t la structurile introduse prin cuvintele cheie struct si union, c)t, mai ales,
la cele definite prin class.
*.6.<. /tr$ct$ri )i $ni$ni
O structur este o colec!ie de date, eventual de tipuri diferite, "i care pot fi referite at)t separat,
c)t "i %mpreun. #efinirea unei structuri se realizeaz cu ajutorul cuv)ntului cheie struct.
struct punct % float &#E;' p;
.stfel am definit p ca fiind de tip punct, punctul fiind compus din dou elemente, x si H, reale. .supra
componentelor unei structuri putem ac!iona prin intermediul operatorului de apartenen!, =.>.
p7&=10; p7E=30;
Exist posibilitatea efecturii de opera!ii cu %ntreaga structur, atribuirea fiind una dintre ele7
p=%10#30';
O declara!ie de structur care nu este urmat de o list de variabile nu produce alocarea
memoriei, ci descrie organizarea structurii.
Odat definit o structur, aceasta va constitui un nou tip de data, put)ndu(se defini continuare
pointeri la acea structur, masive ale cror elemente sunt de tipul acestei structuri "i, chiar mai mult,
elemente de acest tip pot interveni %n definirea altor structuri.
+n cazul definirii unui pointer la o structur, accesul la componentele acelei structuri se va
efectua prin expresii de forma7
punct *pptr;
pptrFG&=10;
"*pptr$7E=30;
parantezele neav)nd dec)t rolul de a indica ordinea %n care ac!ioneaz cei doi operatori,
9J:
si 9.K,
prioritar fiind 9JK.
5nele elemente ale unei structuri pot fi c)mpuri de bi!i. 5n c)mp de bi!i este o configura!ie de
bi!i adiacen!i, ce apar %ntr(un element de tip int. )mpurile sunt declarate de tip unsigned, iar numele
c)mpului este urmat de dou puncte 97K "i un numr ce reprezint numrul de bi!i ocupa!i de c)mpul
respectiv7
unsigned numecampHnrbiti;
)mpurile pot fi accesate ca orice alt element de structur. Orice c)mp trebuie s aib to!i bi!ii
%n interiorul unei zone de tip int (nu poate avea bi!i %n dou cuvinte diferite).
5n caz special de structuri %l constituie uniunile. .cestea sunt structuri alternative pentru care
dimensiunea spa!iului necesar memorrii lor este egal cu cea mai mare dimensiune necesar
memorrii unei componente a acelei structuri. .stfel, toate componentele uniunii ocup aceea"i zon %n
cadrul memoriei. ,ocmai de aceea, la un moment dat, spre deosebire de structuri, este accesibil o
singur component a unei uniuni. 5niunile se definesc %n aceeasi manier ca "i structurile, cuv)ntul
cheie utilizat fiind union.
union untip %
int uint;
float ufloat;
char uchar;
';
untip ovariabila;
#ac, la un moment dat, variabila o_variabila are %ncrcat elementul uint, presupunem cu valoarea
CEBID, atunci accesul ctre celelalte dou componente este dac nu ilegal, cel pu!in lipsit de sens. Qi
aceasta deoarece %n spa!iul rezervat %n memorie variabilei respective se afl un numr %ntreg "i deci, nu
are sens s cutm caracter sau un numr real.
+n timp ce, %n o structur sau o uniune nu poate con!ine dec)t cel mult pointeri la func!ii, %n
$$ aceasta poate con!ine chiar func!ii.
struct punct %
float &#E;
void set "float#float$;
';
5n alt tip de date structurat, specific $$ este tipul class, care va fi prezentat ulterior.
*.;. Parametrii c$ 0a%ori imp%icite
$$ ofer posibilitatea declarrii func!iilor cu valori implicite ale parametrilor. 6a apelarea unei
astfel de func!ii se poate omite specificarea parametrilor efectivi pentru acei parametri formali care au
declarate valori implicite "i se transfer automat valorile respective. 'e pot specifica mai multe
argumente cu valori implicite pentru o func!ie. Este obligatoriu ca numai ultimele argumente sa aib
astfel de valori "i nu este permis alternarea argumentelor cu "i fr valori implicite.
#$emplu7
void fct"int# int=10$;
void tipareste(int i){
printf("%d ",i);
}
void fct"int p1# int p2$%
tipareste(p1); tipareste(p2);
}
void main"$
%
fct(1,2);
fct(3); //impicit a doiea parametr! act!a este 1"
}
0ezultatul rulrii acestui program va fi tiprirea numerelor7
C ; ? C4

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