17.04.2013 Views

Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C

Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C

Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

inline int max (int a, int b) { return a>b ? a : b; }<br />

In C++ pot exista mai multe functii cu acelasi nume dar cu parametri diferiti (ca tip<br />

sau ca numãr). Se spune cã un nume este "supra<strong>în</strong>cãrcat" cu semnificatii ("function<br />

overloading"). Compilatorul poate stabili care din functiile cu acelasi nume a fost<br />

apelatã <strong>în</strong>tr-un loc analizând lista de parametri si tipul functiei. Exemple:<br />

float abs (float f) { return fabs(f); }<br />

long abs (long x) { return labs(x); }<br />

printf ("%6d%12ld %f \n", abs(-2),abs(-2L),abs(-2.5) );<br />

Supradefinirea se practicã pentru functiile membre (din clase) si, <strong>în</strong> particular,<br />

pentru operatori definiti fie prin functii membre, fie prin functii prietene.<br />

Operatori pentru alocare dinamicã<br />

In C++ s-au introdus doi operatori noi, pentru alocarea dinamicã a memoriei new si<br />

pentru eliberarea memoriei dinamice delete, destinati sã <strong>în</strong>locuiascã functiile de alocare<br />

si eliberare (malloc, free, s.a.). Operatorul new are ca operand un nume de tip, urmat<br />

<strong>în</strong> general de o valoare initialã pentru variabila creatã (<strong>în</strong>tre paranteze rotunde);<br />

rezultatul lui new este o adresã (un pointer de tipul specificat) sau NULL daca nu<br />

existã suficientã memorie liberã. Exemple:<br />

nod * pnod; // pointer la nod de lista<br />

pnod = new nod; // alocare fara initializare<br />

assert (pnod != NULL);<br />

int * p = new int(3); // alocare cu initializare<br />

Operatorul new are o formã putin modificatã la alocarea de memorie pentru vectori,<br />

pentru a specifica numãrul de componente. Exemplu:<br />

int * v = new int [n]; // vector de n intregi<br />

Operatorul delete are ca operand o variabilã pointer si are ca efect eliberarea<br />

blocului de memorie adresat de pointer, a cãrui mãrime rezultã din tipul variabilei<br />

pointer sau este indicatã explicit. Exemple:<br />

int * v;<br />

delete v; // elibereaza sizeof(int) octeti<br />

delete [ ] v;<br />

delete [n] v; // elibereaza n*sizeof(int) octeti

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!