Sunteți pe pagina 1din 72

1

Limbaje de programare I

Lect. univ. dr. Stnic Lavinia

1/11/2013 1:25 AM

Noiuni de baz

1/11/2013 1:25 AM

Limbajul C++

Un program C++ este un ansamblu de funcii, una singur fiind funcia principal (funcia main). Limbajul C/C++ este case-sensitive. Pentru a folosi ntr-un program C/C++ funcii declarate n alte fiiere (fiiere header sau librrii), acestea trebuie incluse n fiierul curent printr-o directiv preprocesor #include.

Limbajul C++

Noiuni introductive:

orice instruciune se ncheie cu punct i virgul (;). pot fi scrise mai multe instruciuni pe o singur linie o instruciune poate fi scris pe mai multe linii. un ir de caractere se ncadreaz ntre ghilimele. un caracter se ncadreaz ntre apostrofuri. cuvintele cheie au o semnificaie predefinit pentru compilator comentariile secvene de cod neinterpretate de compilator

Tipuri primitive de date

n limbajul C++ avem 5 tipuri primitive de date:

void 0 B char 1 B int 4 B float 4 B double 8 B


signed short unsigned long

Modificatori de tip:

Constante

Constante ntregi valori pozitive sau negative date n zecimal (baza 10), octal (baza 8) sau hexazecimal (baza 16) Constante reale formatul general al unei constante reale este numit i format exponenial Constante caracter sunt ncadrate ntre caractere apostrof (' ') Literali constante ir de caractere constndntro succesiune de caractere ncadrat ntre ghilimele (" ")

Operaii de intrare / ieire orientate pe streamuri

n librria iostream sunt predefinite dou obiecte:


cin este obiect al clasei istream i permite preluarea (intrarea) de date; cout este obiect al clasei ostream i permite afiarea (ieirea) de date.
Date Caracter ir de caractere Obiect cin cout cin cout Metod get put getline write Funcionare returneaz caracterul citit afieaz un caracter citete un ir de caractere 1) afieaz un ir de caractere 2)

Manipularea caracterelor i a irurilor de caractere

Clase de memorie

Declaraia unei variabile:


<clasa_memorie> <tip> <nume>

Variabile globale i locale Domeniul de vizibilitate i durata de via a unei variabile Clase de memorie:

automatic extern

static register

Operatori i expresii

1/11/2013 1:25 AM

10

10

Tabela de prioriti a operatorilor


Nr. crt. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Clasa operatori () [] operatorii unari + operatorii aritmetici * / multiplicativi operatorii aritmetici + aditivi deplasrile pe bii << >> operatorii de relaie < <= operatorii de testare == != a egalitii operatorii logici pe & bii binari ^ | operatorii logici && binari || operatorul ?: condiional operatorii de = <<= atribuire operatorul virgul , . & % Operatori -> :: * ++ -- (tip)

sizeof

~ new delete

>

>=

>>= += -= *=

/=

%=

&=

^= |=

11

11

Operatori

Operatorul de conversie explicit a tipului cast convertete o expresie


(<tip>)E

Operatorul dimensiune sizeof are rolul de a determina dimensiunea, n octei, necesar alocrii argumentului primit, care poate fi un tip de date sau o expresie. Operatorii relaionali i de testare a egalitii relaie: <, <=, >, >=; testare a egalitii: == (egal), != (diferit)

12

12

Operatori

Operatorii logici pe bii sunt utilizai pentru aplicarea unor mti asupra datelor. Ei accept numai operanzi ntregi (int, char) i se aplic la nivel de bii

~ (complement fa de unu, unar) & (i logic pe bii, binar) | (sau logic pe bii, binar) ^ (sau logic exclusiv pe bii, binar) <<(deplasare la stnga, binar) >>(deplasare la dreapta, binar)

13

13

Operatori

Operatorii logici

! (negaie logic, unar) && (i logic, binar) || ( sau logic, binar) atribuire simpl (=) atribuire multipl atribuire compus (+=,=,*=,/=,%=,&=,|=,^=,<<=,>>=) incrementare / decrementare (++, --)

Operatorii de atribuire

14

14

Operatori

Operatorul condiional ?: este singurul operator teriar (cu trei operanzi) al limbajului
E1?E2:E3

Operatorul virgul , are rolul de a grupa mai multe expresii, tipul i valoarea expresiei virgul fiind date de ultima expresie.
E1, E2

15

Instruciuni

15

1/11/2013 1:25 AM

16

16

Instruciuni

Instruciunea vid (;) nu execut nimic Instruciunea expresie are sintaxa:


E;

unde E este o expresie oarecare (de exemplu, de atribuire, apel de funcie, etc.). Instruciunea compus are rolul de a grupa mai multe instruciuni
{ declaraii i/sau instruciuni }

17

17

Instruciuni

Instruciunea if are dou forme


if (E) I1 if (E) I1 else I2

Instruciunea switch
switch(E){ case <alt1>: [I1] [break;] case <alt2>: [I2] [break;] .... case <altn>: [In] [break;] [default: In+1] }

18

18

Instruciuni

Instruciunea while
while (E) I

Instruciunea do while
do I while (E);

Instruciunea for
for (E1;E2;E3) I

19

19

Instruciuni

Instruciunea break ntrerupe execuia instruciunii switch sau a unei instruciuni repetitive (for, while, do...while) Instruciunea continue permite abandonarea iteraiei curente ntr-o instruciune repetitiv (for, while, do...while). Instruciunea return termin execuia unei funcii. Are una din urmtoarele forme:
return;

sau
return E;

20

Pointeri i masive

20

1/11/2013 1:25 AM

21

21

Pointeri

Un pointer este o variabil ce are ca valoare o adres de memorie. Pointerii permit accesul indirect la anumite zone de memorie, prin intermediul adresei acestora. Declaraia unui pointer:
<tip_pointat> *<nume_pointer>;

Indiferent de tipul pointat, un pointer ocup n memorie 4 octei

22

22

Pointeri

ncrcarea pointerilor

cu adresa unei variabile existente


int a=3; int *pi=&a;

prin alocare dinamic (la execuie) Alocarea dinamic se realizeaz cu ajutorul operatorului new sau a funciilor de bibliotec cum ar fi malloc sau calloc. Eliberarea memoriei se realizeaz cu operatorul delete, respectiv cu funcia de bibliotec free.

23

23

Pointeri

Aritmetica de pointeri

atribuirea pointerilor compararea pointerilor adunarea i scderea pointerilor cu un ntreg incrementarea / decrementarea pointerilor scderea a doi pointeri pointer constant, zon de memorie variabil pointer variabil, zon de memorie constant pointer constant, zon de memorie constant

Modificatorul const

24

24

Masive de date

Masivele sunt colecii de date omogene (de acelai tip), stocate ntr-o zon continu de memorie Declararea masivelor
<tip> <nume_masiv> [dim1][dim2]...[dim_n];

Compilatorul aloc unui masiv de date o zon de memorie necesar pentru a stoca toate elementele sale
In limbajul C indicii unui masiv ncep de la 0.

25

25

Masive de date

ncrcarea masivelor

ncrcare individual a elementelor: prin citire de la terminal sau din fiier; prin iniializare la declaraie.

Referirea elementelor elementele unui masiv se pot referi indexat (cu operatorul [ ]) sau folosind aritmetica de pointeri. Prelucrarea masivelor (operaii de intrare / ieire, atribuiri, alte prelucrri) se realizeaz la nivel de element (adic element cu element)

26

26

Legtura dintre pointeri i masive

Numele unui masiv este un pointer constant ncrcat cu adresa de memorare a primului element. Faptul c numele masivului este un pointer constant are ca efect imposibilitatea de a-l face s refere alt zon de memorie Fiind pointer, numele masivului poate fi implicat n aritmetica de pointeri pentru a referi elementele. Astfel, o referire indexat V[i] este transformat n *(V+i).

27

27

Legtura dintre pointeri i masive

Vectori reprezentarea i referirea elementelor. Elementele unui vector int V[50]; pot fi referite fie prin indexare, fie folosind indirectare (*) i aritmetica de pointeri: V[i] *(V+i) Alocarea dinamic a vectorilor alocarea / dezalocarea dinamic a unei vector cu n elemente:
int *pi=new int[n]; ... delete[]pi;

Accesarea elementelor se face indexat (pi[3]), sau folosind aritmetica de pointeri (*(p+3)).

28

28

Legtura dintre pointeri i masive

Matrice reprezentarea i referirea elementelor. Aritmetica de pointeri poate fi combinat cu referirea indexat. Astfel, un element A[i][j] al matricei poate fi referit cu oricare dintre expresiile echivalente:
A[i][j] *(A[i]+j) (*(A+i))[j] *(*(A+i)+j)

29

29

Legtura dintre pointeri i masive

Alocarea dinamic a matricelor prin alocarea dinamic se pot gestiona matrice a cror numr de elemente pe linii difer, rezervndu-se numai spaiul necesar.
int **note; note=new int*[6]; //sase semestre for (i=0;i<6;i++) note[i]=new int[d[i]]; // unde d[i]=nr. disciplinelor

30

30

Legtura dintre pointeri i masive

Dezalocarea
for(i=0;i<6;i++) delete[] note[i]; delete[] note;

31

31

Masive de pointeri Pointeri de masive

Pointerii pot fi grupai n masive. Aadar, o declaraie de forma:


int *a[5];

declar un vector de 5 pointeri la tipul int. Similar, un pointer poate adresa un masiv. Declaraia:
int (*a)[3][5];

declar un pointer ce va pointa o matrice cu 3 linii i 5 coloane.

32

iruri de caractere

32

1/11/2013 1:25 AM

33

33

iruri de caractere

Limbajul C++ nu dispune de un tip de date aparte sau de operatori speciali destinai gestiunii irurilor de caractere. Acestea sunt tratate ca vectori de caractere, sfritul de ir fiind marcat printr-un octet nul, numit terminator de ir (caracterul '\0' cruia i corespunde codul ASCII 0). In general, funciile destinate lucrului cu iruri de caractere adaug terminatorul la sfritul irului

34

34

Operaii de intrare / ieire

Pentru preluarea / afiarea irurilor de caractere (ex. char sir[20]) la terminal se pot utiliza:
intrare (1) cin>>sir; (2) cin.getline(sir,20); (3) scanf(%s,sir); (4) gets(sir); ieire
cout<<sir; printf("%s",sir); puts(sir);

La nivel de caracter (ex: char ch;) se pot folosi:


intrare
cin>>ch; ch=cin.get(); scanf(%c,&ch);

ieire
cout<<ch; cout.put(ch); printf(%d,ch);

35

35

Funcii de prelucrare a irurilor


Permit manipularea irurilor de caractere. Sunt declarate n librria <string.h> int strlen (char* sir) ntoarce lungimea (n octei) a irului sir
char *strcpy (char *dest, char *sursa)

copiaz irul surs la adresa destinaie i ntoarce irul dest rezultat.

char *strncpy(char*dest,char*sursa,int n)

copiaz primele n caractere din irul sursa la adresa dest i ntoarce irul rezultat.

36

36

Funcii de prelucrare a irurilor

char *strcat (char *dest, char *sursa)

concateneaz irul surs la sfritul irului destinaie. ntoarce irul dest rezultat.

char *strncat(char*dest,char*sursa,int n)

copiaz primele n caractere din irul sursa la sfritul irului dest. Intoarce irul dest rezultat.

char *strtok (char *sir1, char *sir2)

sparge irul sir1 n atomi (cuvinte) dup caracterele delimitatoare coninute n sir2.

37

37

Funcii de prelucrare a irurilor

int strcmp (char *sir1, char *sir2) compar lexicografic irurile primite ca argument
int stricmp (char *sir1, char *sir2)

compar alfanumeric cele dou iruri primite ca argument, n manier case insensitive int strncmp (char*sir1,char*sir2,int n) compar alfanumeric primele n caractere din cele dou iruri primite ca argument int strnicmp (char*sir1,char*sir2,int n) compar alfanumeric primele n caractere din cele dou iruri, n manier case insensitive .

38

38

Funcii de prelucrare a irurilor

char *strchr (char *sir, int c)

ntoarce adresa primei apariii a caracterului c n sir, respectiv NULL n caz c c nu exist n ir.

char *strrchr (char *sir, int c)

ntoarce adresa ultimei apariii a caracterului c n sir, respectiv NULL n caz c c nu exist n ir.

char *strstr (char *sir1, char *sir2)

ntoarce adresa primei apariii a irului sir2 n sir1, respectiv NULL dac sir2 nu se gsete n sir1.

39

39

Funcii de prelucrare a irurilor

char *strrev (char *sir)

inverseaz (n oglind) irul de caractere primit ca argument i ntoarce irul rezultat.

char *strlwr (char *sir)

convertete toate majusculele irului de caractere primit ca argument n minuscule i ntoarce irul rezultat.

char *strupr (char *sir)

convertete toate minusculele irului de caractere n majuscule i ntoarce irul rezultat.

40

40

Funcii de prelucrare a irurilor

char *strpbrk (char *sir1, char *sir2)

ntoarce adresa primei apariii a oricrui caracter din sir2 n sir1, sau NULL dac irurile nu au nici un caracter comun.

char *strset (char *sir, int c)

iniializeaz irul cu caracterul c.

char *strnset (char *sir, int c, int n)

iniializeaz primele n caractere din sir cu caracterul c.

41

Funcii

41

1/11/2013 1:25 AM

42

42

Funcii

O funcie conine un proces de calcul ce se poate executa de mai multe ori ntr-un program, ns pentru valori de intrare diferite, numite parametri sau argumente. n urma efecturii procesului de calcul, funcia poate sau nu s obin un rezultat, acesta va fi valoarea ntoars sau returnat de ctre funcie.

43

43

Funcii

Definiia unei funcii este alctuit din antet i corp i are sintaxa:

Prototipul unei funcii are rolul de a informa compilatorul asupra numelui, listei de parametri i a tipului ntors de ctre funcie, urmnd ca funcia s fie definit ulterior
<tip_intors> <nume_functie>(<lista_parametri_formali>);

44

44

Funcii

Apelul unei funcii are sintaxa:


<nume_functie>(<lista_parametri_efectivi>)

Dac funcia nu ntoarce void, i se dorete utilizarea valorii returnate, apelul su va fi inclus, ca operand, ntr-o expresie.

Valoarea ntoars trebuie specificat cu instruciunea return:


dac funcia ntoarce void, prezena instruciunii return nu este obligatorie dac funcia ntoarce un tip de date diferit de void, instruciunea return va primi obligatoriu o valoare de tipul returnat sau compatibil cu acesta.

45

45

Transferul parametrilor

Apelul unei funcii presupune salt ctre adresa codului executabil al funciei, rezervare de spaiu pe stiv pentru variabilele automatice: parametrii formali i variabilele locale. Dup cum o variabil transmis ca parametru poate sau nu s fie modificat la revenirea din funcie, se disting dou modaliti de transfer al parametrilor:

prin valoare prin referin

46

46

Transferul parametrilor

Transferul prin valoare (call by value)

la apelul funciei, parametrii automatici sunt alocai pe stiv i ncrcai cu valorile de la apel, n urma unor eventuale conversii de tip. toate prelucrrile efectuate asupra lor acioneaz asupra copiilor de pe stiv, astfel c la revenirea din funcie, originalele de la apel vor rmne nealterate.
void swapV (int a, int b){ int temp=a; a=b; b=temp; }

47

47

Transferul parametrilor

Transferul prin referin (call by reference) se realizeaz n dou variante, transmind funciei ca parametri:

adresele originalelor parametrii formali vor fi adresele variabilelor de la apel (pointeri); prin intermediul adreselor, se vor putea modifica variabilele originale
void swapA(int *a, int *b) { int temp=*a; *a=*b; *b=temp; }

48

48

Transferul parametrilor

referine ctre acestea const n definirea parametrilor formali ca sinonime (alias-uri) ale celor efectivi; parametrii formali se vor identifica cu parametrii de la apel, iar modificarea acestora n interiorul funciei va afecta originalele
void swapR(int &a, int &b){ int temp=a; a=b; b=temp; }

49

49

Valoarea ntoars

O funcie poate ntoarce cel mult o valoare (specificat prin instruciunea return), care trebuie s fie de tipul ntors sau compatibil cu acesta. O funcie poate ntoarce o dat:

prin valoare prin pointer (adresa unei date oarecare, a unui masiv sau a unei funcii) prin referin (o referin ctre o dat fie static, fie primit prin referin ca parametru); aceasta permite ca funcia s poat fi utilizat ca l-value.

50

50

Suprancrcarea funciilor

Permite definirea mai multor funcii cu acelai nume, dar care se aplic pe liste diferite de parametri. Valoarea returnat de funcii i dimensiunile masivelor nu constituie un criteriu de individualizare n momentul apelrii uneia dintre funcii, identificarea variantei de apelat se face n funcie de numrul i tipul parametrilor efectivi.

51

51

Suprancrcarea funciilor

n procesul de individualizare a funciei apelate, se testeaz, pe rnd, urmtoarele situaii:


exist o coresponden exact ntre parametrii efectivi i cei formali; se poate efectua o conversie implicit de tip pentru tipuri primitive de date se poate efectua o conversie de tip pentru tipurile definite de utilizator; se poate efectua o conversie de tip explicit definit de programator prin suprancrcarea operatorului cast.

52

52

Suprancrcarea funciilor

Dac pe unul dintre niveluri a fost selectat o funcie unic ce corespunde, aceasta se apeleaz Dac nu este selectat nici una, se trece mai departe la etapa urmtoare. Dac la un moment dat sunt selectate mai multe funcii, se va semnala eroare de ambiguitate. Dac se parcurg toate etapele i nu a fost selectat nici o funcie, se va semnala eroare la linkeditare.

53

53

Parametri cu valori implicite

Limbajul C/C++ permite definirea unor valori implicite pentru parametrii formali ai unei funciei, valori ce vor fi utilizate atunci cnd la apel nu se specific altceva. In antetul funciei, parametrii formali cu valori implicite se afl ntotdeauna la sfritul listei de parametri.
int calc(int a, char op='+', int b=1){ switch(op){ case '+':return a+b; case '-':return a-b; } }

54

Funcii cu numr variabil de parametri

54

Limbajul permite declararea de funcii a cror list de parametri nu este complet definit. Funcia poate primi, la apel, orice numr de parametri, de orice tip. Lista variabil de parametri prezent n antetul funciei se marcheaz cu secvena ,... . Ea trebuie precedat de cel puin un parametru fix i se afl ntotdeauna la sfritul listei de parametri. int ampl(int n,...) Ex.

55

Funcii cu numr variabil de parametri

55

Prelucrarea parametrilor din lista variabil se face cu tipul va_list i macrodefiniiile va_start, va_arg i va_end definite n librria stdarg.h:

va_list definete un pointer ctre lista argumentelor va_start iniializeaz lista cu adresa primului parametru din lista variabil va_arg ntoarce valoarea urmtorului argument din lista variabil va_end seteaz pointerul arg pe NULL

56

56

Funcii recursive

O funcie recursiv este o funcie care conine n definiia sa un autoapel, direct sau indirect. O funcie recursiv trebuie s satisfac condiia de consisten, prin care se asigur revenirea din recursivitate. Astfel, funcia recursiv trebuie s aib cel puin un punct n care valoarea ei este direct calculabil. long factR(int n){ Ex.
if(!n)return 1; return n*factR(n-1); }

57

57

Pointeri ctre funcie


Un pointer poate conine adresa (de nceput) a codului executabil al unei funcii. Aceast mecanism permite ca o funcie s poat participa la diferite operaii cum ar fi transferul ctre alt funcie, apelul prin intermediul pointerului .a.m.d. Un pointer ctre funcie se declar astfel:
tip (*pf)(lista_parametri);

58

58

Pointeri ctre funcie

Pointerul astfel definit poate fi ncrcat cu adresa unei funcii cu prototipul: printr-o simpl atribuire: Ulterior, funcia ctre care pointeaz pf poate fi apelat prin intermediul pointerului:
(*pf)(lista_parametri_efectivi)

Vectori de pointeri ctre funcie pointerii ctre funcie pot fi grupai n masive, obinnd astfel vectori de pointeri ctre funcie.

59

59

Argumente n linia de comand

Limbajul permite preluarea parametrilor la linia de comand prin argumente ale funciei main.
int main( int argc , char *argv[] , char *envp[] );

argc (argument count) numrul de parametri din argv; el este ntotdeauna mai mare sau egal cu 1; argv (argument values) vector de iruri de caractere care conine parametrii transmii la linia de comand envp (environment pointers) vector de iruri de caractere ce reprezint valorile variabilelor de mediu. Ultimul element al vectorului este NULL.

60

60

Valoarea ntoars de funcia main

Reprezint un cod transmis programului apelant (sistemului de operare) ce semnific modul n care s-a ncheiat execuia: 0, n caz de succes, sau o valoare nenul n caz contrar.

Dac nu se dorete transmiterea unui cod explicit apelantului, funcia main va avea tip returnat void:
void main( ){...}

Dac funcia are tip returnat int, atunci este necesar returnarea unui numr ntreg la ncheierea execuiei.
int main( ){ ... return 0; }

61

61

abloane de funcii

abloanele permit parametrizarea funciilor; astfel, este permis definirea unei funcii generice ce prelucreaz date a cror tip nc nu este precizat, tip ce va fi declarat ca template, acesta urmnd s fie specificat la apelul funciei.
Funcia generic va putea fi apelat cu diferite tipuri de date: swap(a,b) unde a i b pot fi variabile ntregi, reale sau de tipuri definite de utilizator
template <class T> void swap (T &a, T &b) { T aux=a; a=b; b=aux; }

62

Tipuri de date definite de utilizator

62

1/11/2013 1:25 AM

63

63

Enumerri

Tipul enumerare permite asocierea de nume sugestive unor constante numerice


enum [<tip_enum>] { elem1[=val1], ...., elemn[=valn] };

Valorile elementelor sunt opionale; dac lipsesc, atunci elementelor fr valoare explicit li se vor atribui valori conform urmtoarelor dou reguli:

valoarea implicit pentru primul element este 0; valoarea implicit a celorlalte elemente este valoarea elementului precedent, incrementat cu 1

64

64

Structuri

Sunt tipuri de date definite de utilizator ce reprezint colecii eterogene de date (date de tipuri diferite), stocate ntr-o zon continu de memorie. Declararea structurilor:
struct <nume_struct> { <lista_declaratii_campuri> } <lista variabile>;

Numele structurii i lista de variabile pot lipsi, dar nu simultan.

65

65

Structuri

Declararea variabilelor de tipul structurii:

Accesarea cmpurilor structurii se face: cu operatorul . pentru variabilele simple, cu operatorul -> n cazul pointerilor ncrcarea structurilor:

ncrcare individual a cmpurilor prin iniializare la declaraie prin atribuire (cmpurile structurii vor fi copiate bit cu bit) prin citire de la terminal sau din fiier

66

66

Uniuni

Uniunile reprezint, ca i structurile, colecii de date de tipuri diferite, ns, spre deosebire de acestea, permit memorarea la un moment dat numai a unuia dintre cmpurile sale. In cazul unei uniuni nu se aloc memorie pentru fiecare cmp, ci numai pentru cmpul care ocup cel mai mult, iar zona rezervat lui este utilizat, n diferite momente ale execuiei, pentru stocarea oricruia (dar unul singur) dintre cmpurile uniunii.

67

67

Uniuni

Definirea unei uniuni:


union <nume_uniune> { <lista_declaratii_campuri> } <lista variabile>;

Pentru memorarea unei uniuni, compilatorul rezerv spaiu pentru un singur cmp - cel mai mare:
sizeof(<nume_uniune>)= max {sizeof(camp)}
camp

Programatorul trebuie s gestioneze foarte atent care este cmpul reinut n zona rezervat uniunii pe parcursul execuiei programului.

68

68

Cmpuri de bii

Limbajul C/C++ permite prelucrarea datelor la nivel de bit. Cmpurilor structurilor i uniunilor li se pot aloca bii individuali n cadrul unui octet, bii ce pot fi accesai independent de restul octetului. O structur cu cmpuri de bii are sintaxa:
struct <nume_struct>{ <lista_declaratii_campuri> } <lista_variabile>;

Declaraia unui cmp al structurii pe bii este de forma:


<tip> <nume_camp>:<dim_biti>;

69

69

Cmpuri de bii

Operaiile pe cmpurile de bii acestora nu li se poate extrage adresa (pentru citire cu scanf, spre exemplu), deoarece adresa unui cmp de bii nu este un ntreg; astfel, cmpurile de bii nu pot fi organizate n masive. ncrcarea structurilor pe bii

prin ncrcarea individual a cmpurilor citire de la terminal sau din fiier; n aceast situaie se va utiliza o variabil auxiliar iniializare la declaraie

70

70

Tipuri sinonime de date

Tipurile sinonime de date au rolul de a asocia un nume unui tip de date. Ele se utilizeaz, de regul, pentru a nlocui declaraii mai complicate. Tipul de date poate fi un tip primitiv (cu eventuali modificatori) sau un tip de date definit de utilizator, deja declarat. Definirea unui tip sinonim:
typedef <tip> <nume_tip>;

Definirea unui tip sinonim de date nu se poate face n interiorul unei funcii.

71

71

Bibliografie

Crian D.A., Limbajul C/C++. Fundamente. Vol I, Ed. ProUniversitaria, Editie Revizuita, Bucureti, 2010; Stnic J.L.,Crian D.A., Limbajul C/C++. Aplicaii i teste gril, vol. III, Ed. ProUniversitaria, Bucureti, 2010; Smeureanu I., D. A. Crian, J. L. Stnic, Limbajul C/C++. Teorie i aplicaii, Ed. Universul Juridic, Bucureti, 2005 Jamsa K., Totul despre C si C++ - Manualul fundamental de programare in C si C++, Ed. Teora, Bucureti, 2005 Schildt H., C/C++ Programmer's Reference, Second Edition, Ed. Osborne McGraw-Hill, 2000 Oualline S., Practical C++ Programming, Second Edition,

72

72

END