Sunteți pe pagina 1din 6

Laborator 1 POO

Particulariti ale limbajului C++


Completri aduse de limbajul C++ fa de limbajul C

Completrile aduse limbajului C vin n sprijinul programatorului i i ofer acestuia noi


instrumente de lucru, permindu-i s realizeze programe mult mai compacte, ntr-un mod
avantajos din mai multe puncte de vedere: modularizare, fiabilitate, reutilizarea codului, etc.
De exemplu, suprancrcarea funciilor permite reutilizarea numelui funciei i pentru alte
funcii, mrind astfel lizibilitatea programului.

Cuprins: Laboratorul va trata aspecte referitoare la:


1. Intrri i ieiri;
2. Suprancrcarea funciilor;
3. Alocarea dinamic a memoriei (operatorii new i delete);
4. Parametrii cu valori implicite;
5. Transferul prin referin;
6. Alte nouti aduse de C++ fa de C

1. Intrri i ieiri
Limbajul C++ furnizeaz obiectele cin i cout, n plus fa de funciile scanf i printf din
limbajul C. Pe lng alte avantaje, obiectele cin i cout nu necesit specificarea formatelor.
Exemplu:
cin >> variabila;
cout << "sir de caractere" << variabila << endl;
Utilizarea acestora necesit includerea header-ului bibliotecii de stream-uri, <iostream.h>.
Un stream este un concept abstract care desemneaz orice flux de date de la o surs la o
destinaie. Concret, stream-urile reprezint totalitatea modalitilor de realizare a unor operaii
de citire sau scriere.
Operatorul >> are semnificaia de "pune la ...", iar << are semnificaia de "preia de la ...".
Exemplu:
#include <iostream.h>
void main(void)
{
int a;
float b;
char c[20];
cout <<"Tastati un intreg : "<< endl;
cin >> a;
cout << "Tastati un numar real : " << endl;
cin >> b;
cout << "Tastati un sir de caractere : " << endl;

1
cin >> c;
cout << "Ati tastat " << a << ", " << b << ", " << c << ".";
cout << endl;
}

2. Suprancrcarea funciilor. Funcii cu parametrii implicii


Suprancrcarea funciilor
Limbajul C++ permite utilizarea mai multor funcii care au acelai nume, caracteristic numit
suprancrcarea funciilor. Identificarea lor se face prin numrul de parametri i tipul lor.
Exemplu:
int suma (int a, int b)
{
return (a + b);
}
float suma (float a, float b)
{
return (a + b);
}
Dac se apeleaz suma (3,5), se va apela funcia corespunztoare tipului int, iar dac se apeleaz
suma (2.3, 9), se va apela funcia care are parametrii de tipul float. La apelul funciei suma (2.3,
9), tipul valorii 9 va fi convertit automat de C++ n float (nu e nevoie de typecasting).

Funcii cu valori implicite


ntr-o funcie se pot declara valori implicite pentru unul sau mai muli parametri. Atunci cnd
este apelat funcia, se poate omite specificarea valorii pentru acei parametri formali care au
declarate valori implicite. Valorile implicite se specific o singur dat n definiie (de obicei
n prototip). Argumentele cu valori implicite trebuie s fie amplasate la sfritul listei.
Exemplu:
void adunare (int a=5, double b=10)
{
... ;
}
...
adunare (); // <=> adunare (5, 10);
adunare (1); // <=> adunare (1, 10);
adunare (1, 4); // <=> adunare (1, 4);

4. Operatorii new i delete


Limbajul C++ introduce doi noi operatori pentru alocarea dinamic de memorie, care nlocuiesc
familiile de funcii "free" i "malloc" i derivatele acestora.
Astfel, pentru alocarea dinamic de memorie se folosete operatorul new, iar pentru eliberarea
memoriei se folosete operatorul delete.

2
Operatorul "new" returneaz un pointer la zona de memorie alocat dinamic (dac alocarea se
face cu succes) i NULL dac alocarea de memorie nu se poate efectua.
Operatorul "delete" elibereaz zona de memorie la care pointeaz argumentul su.
Exemplu:
struct sistem
{
char nume[20];
float disc;
int memorie;
int consum;
};
struct sistem *x;
void main(void)
{
x = new sistem;
x->disc = 850;
x->memorie = 16;
x->consum = 80;
delete x;
}
Programul prezentat definete un pointer la o structur de tip sistem i aloc memorie pentru el,
folosind operatorul new. Dezalocarea memoriei se face folosind operatorul delete.
Dac se dorete alocarea de memorie pentru un tablou de elemente, numrul elementelor se va
trece dup tipul elementului pentru care se face alocarea.
Exemplu:
x = new sistem[20]; // aloc memorie pentru 20 de elemente de tip
sistem;
delete[] x; // eliberarea memoriei

5. Transferul prin referin


O referin este un alt nume al unui obiect (variabila).
Pentru a putea fi folosit, o referin trebuie iniializat in momentul declararii, devenind un
alias (un alt nume) al obiectului cu care a fost iniializat.
Folosind transferul prin referin, n funcii nu se va mai transmite ntreaga structur, ci doar
adresa ei. Membrii structurii pot fi referii folosind . sau -> pentru pointeri. n cazul
utilizrii referinelor, se lucreaz direct asupra obiectului referit.
Considernd un obiect x, prin "&x" se nelege referin la obiectul x.
Exemplu:
void ex (int &i)
{
i = 7;

3
}

int main()
{
int n = 3;
ex(n);
cout<<n; // se va afia 3
}

void ex (int i)
{
i = 7;
}

int main()
{
int n = 3;
ex(n);
cout<<n; // se va afia 7
}
Referina nu este un pointer ctre obiectul referit, este un alt nume al obiectului!

6. Alte nouti aduse de C++ fa de C


a) Comentarii de sfrit de linie
Limbajul C admite delimitatorii C /* */ pentru comentarii care se pot ntinde pe mai multe
linii. C++ introduce delimitatorul // pentru adugarea mai comod de comentarii de sfrit de
linie. Tot textul care urmeaz dup // pn la sfritul liniei este considerat comentariu.
Exemplu:
if (i == 20) break; //iesire fortata din ciclu

b) Plasarea declaraiilor
Limbajul C impune gruparea declaraiilor locale la nceputul unui bloc. C++ elimin acest
inconvenient, permind declaraii n interiorul blocului, de exemplu imediat nainte de
utilizare. Domeniul unei astfel de declaraii este cuprins intre poziia declaraiei i sfritul
blocului.
Exemplu: (rulai urmtoarea secven de program)
void main(void)
{
int i;
cin >> i;
int j = 5*i-1; //declaratie i initializare de valoare
cout << j;}

4
c) Operatorul de rezoluie (operator de acces, operator de domeniu)
Limbajul C++ introduce operatorul de rezoluie (::), care permite accesul la un obiect (sau
variabil) dintr-un bloc n care acesta nu este vizibil, datorit unei alte declaraii.
Exemplu: (rulai urmtoarea secven de program)
char s[20]= "variabila globala";
void afiseaza(void)
{
char s[20] = variabila locala;
cout << ::s; //afiseaza variabila global
cout << s; //afiseaza variabila locala
}
d) Funcii inline
C++ ofer posibilitatea declarrii funciilor inline, care combin avantajele funciilor propriu-
zise cu cele ale macrodefiniiilor. Astfel, la fiecare apelare, corpul funciei declarate inline este
inserat n codul programului de ctre compilator.
Fa de macrodefiniii (care presupun o substitutie de text ntr-o faz preliminar compilrii),
pentru funciile inline compilatorul insereaz codul obiect al funciei la fiecare apel.
Avantajul creterii de viteza se pltete prin creterea dimensiunii codului. Aadar, funciile
inline trebuie s fie scurte.
Exemplu:
inline int comparare(int a,int b)
{
if (a>b) return 1;
if (a<b) return 0;
if (a==b) return -1;
}

Exerciii:
1. S se modifice urmtorul program astfel nct s complileze:
#include <iostream.h>
void funcie(int a=123, double b, double c=123.456, char *s="prg")
{
cout << "\n a=" << a << " b=" << b << " c=" << c << " s=" << s;
}

void main(void)
{
funcie(456, 4.5, 1.4, "apel 1");
funcie(456, 4.5, 1.4);
funcie(456, 4.5);
funcie(456.5);
}

5
2. S se realizeze un program care calculeaz produsul a dou numere reale i a dou
numere complexe, specificate prin parte reala i parte imaginar. Funciile de calcul al
produselor vor avea acelai nume i parametri diferii.

Trimitei rezolvarea acestor exerciii la adresa: adriana.birlutiu@uab.ro cu subiectul INFO II,


POO, Numele vostru. Termen de predare: 11 octombrie, ora 20:00.

Bibliografie
Corina Rotar. PROGRAMARE ORIENTAT OBIECT. Note de curs. UNIVERSITATEA 1
DECEMBRIE 1918 ALBA IULIA. Seria Didactic.
Dorin Berian, Adrian Coco. PROGRAMARE ORIENTAT PE OBIECTE. ndrumtor de
laborator. Universitatea Politehnica din Timioara Facultatea de Automatic i Calculatoare.

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