Sunteți pe pagina 1din 5

Clase şi obiecte

CAP V ÎNTREBĂRI ŞI EXERCIŢII

40.Unui pointer generic i se poate atribui valoarea unui pointer cu tip?


41.Care este legătura între tablouri şi pointeri? În limbajele C/C++ există o strânsă legătură între pointeri şi
tablouri, deoarece numele unui tablou este un pointer (constant!) care are ca valoare adresa primului element
din tablou. Diferenţa dintre numele unui tablou şi o variabilă pointer este aceea că unei variabile de tip
pointer i se pot atribui valori la execuţie, lucru imposibil pentru numele unui tablou.
42.De ce numele unui tablou este lvalue? Numele unui pointer este considerat ca fiind un lvalue (left value-
valoare stânga), adica poate fi folosit atât pentru a obţine valoarea obiectului, cât şi pentru a o modifica
printr-o operaţie de atribuire.

Chestiuni practice Pointeri

1. Să se implementeze programele cu exemplele prezentate.


2. Să se scrie programele pentru exerciţiile rezolvate care au fost prezentate.
3. Analizaţi următoarele secvenţe de instrucţiuni. Identificaţi secvenţele incorecte (acolo unde este cazul) şi
sursele erorilor:
 int a,b,*c; a=7; b=90; c=a;
 double y, z, *x=&z; z=&y;
 char x, **p, *q; x = 'A'; q = &x; p = &q; cout<<”x=”<<x<<’\n’;
cout<<”**p=”<<**p<<’\n’; cout<<”*q=”<<*q<<’\n’;
cout<<”p=”<<p<<” q=”<<q<<”*p=”<<*p<<’\n’;
 char *p, x[3] = {'a', 'b', 'c'}; int i, *q, y[3] = {10, 20, 30};
p = &x[0];
for (i = 0; i < 3; i++)
{
cout<<”*p=”<<*p<<” p=”<<p<<’\n’;
p++;
}
q = &y[0];
for (i = 0; i < 3; i++)
{
cout<<”*q=”<<*q<<”q=”<<q<<’\n’;
q++;
}
 const char *sirul=”să programăm”; *(sirul)++;
 double a, *s; s=&(a+89); cout<<”s=”s<<’\n’;
 double a1, *a2, *a3; a2=&a1; a2+=7.8; a3=a2; a3++;
 int m[10], *p;p=m;
for (int i=0; i<10; i++)
cout<<*m++;
 void *p1; int *p2; int x; p2=&x; p2=p1;
 char c=’A’; char *cc=&c; cout<<(*cc)++<<’\n’;

Chesiuni practice - Functii

1. Să se implementeze programele cu exemplele prezentate.


2. Să se scrie programele pentru exerciţiile rezolvate care au fost prezentate.
3. Să se modularizeze programele din capitolul 4 (3.a.-3.g., 4.a.-4.i, 5.a.-5.h.), prin implementarea unor
funcţii (funcţii pentru: citirea elementelor unui vector, afişarea vectorului, calculul sumei a doi vectori,
calculul produsului scalar a doi vectori, aflarea elementului minim din vector, citire a unei matrici,
afişare a matricii, calculul transpusei unei matrici, calculul sumei a două matrici, calculul produsului a
două matrici, calculul produsului elementelor din triunghiul haşurat, etc.).
4. Să se rescrie programele care rezolvă exerciţiile din capitolul 3, folosind funcţii (pentru calculul
factorialului, aflarea celui mai mare divizor comun, ordonarea lexicografică a caracterelor, etc). Utilizaţi
funcţiile de intrare/ieşire printf şi scanf.

133
Clase şi obiecte
5. Să se scrie un program care citeşte câte două numere, până la întâlnirea perechii de numere 0, 0 şi
afişează, de fiecare dată, cel mai mare divizor comun al acestora, folosind o funcţie care îl calculează.
6. Se introduce de la tastatura un număr întreg. Să se afişeze toţi divizorii numărului introdus. Se va folosi o
funcţie de calcul a celui mai mare divizor comun a 2 numere.
7. Secvenţele următoare sunt corecte din punct de vedere sintactic? Dacă nu, identificaţi sursele erorilor.
 void a(int x, y) {cout<<"x="<<x<<" y="<<y<<'\n'; }
void main( ) { int b=9; a(6, 7); }
 void main( ) { int x=8; double y=f(x); cout<<"y="<<y<<'\n';}
int f(int z) {return z+z*z;}
8. Scrieţi o funcţie găseşte_cifra care returnează valoarea cifrei aflate pe poziţia k în cadrul numărului
n, începând de la dreapta (n şi k vor fi argumentele funcţiei).
9. Implementaţi propriile versiuni ale funcţiile de lucru cu şiruri de caractere (din paragraful 4.4).
10. Să se calculeze valoarea funcţiei g, cu o eroare EPS (a, b, EPS citite de la tastatură):
b b
2
∫ √( x +x +1) |x+a| ∫ x∗arctg(b /(b+x ))
g(x)= a *ln dx + a dx
11. Implementaţi funcţii iterative şi recursive pentru calculul valorilor polinoamelor Hermite H n (y),
ştiind că: H 0 (y)=1, H 1 (y)=2y, H n (x)=2yH n−1 (y)-2H n−2 (y) dacă n>1. Comparaţi
timpul de execuţie al celor două funcţii.
12. Să se scrie un program care generează toate numerele palindrom, mai mici decât o valoare dată, LIM. Un
număr palindrom are cifrele simetrice egale (prima cu ultima, a doua cu penultima, etc). Se va folosi o
funcţie care testează dacă un număr este palindrom.
13. Fie matricea C (NXN), N<=10, ale cărei elemente sunt date de relaţia:
j
∑ sin (kx )
j! + k =0 , dacă i<j
i , unde x ∈ [0,1], x introdus de la
C i, j = x , dacă i=j tastatură
i ∑ cos(kx )
i! + k=0 , dacă i>j
a) Să se implementeze următoarele funcţii: de calcul a elementelor matricii; de afişare a matricii; de
calcul şi de afişare a procentului elementelor negative de pe coloanele impare (de indice 1, 3, etc).
2 3 4 5
b) Să se calculeze şi să se afişeze matricea B, unde: B=C - C +C -C +C .
14. Să se creeze o bibliotecă de funcţii pentru lucrul cu matrici, care să conţină funcţiile utilizate frecvent
(citirea elementelor, afisarea matricii, adunare a două matrici, etc). Să se folosească această bibliotecă.
15. Să se creeze o bibliotecă de funcţii pentru lucrul cu vectori, care să conţină funcţiile utilizate frecvent. Să
se folosească această bibliotecă.

CAP VII ÎNTREBĂRI ŞI EXERCIŢII

Chestiuni teoretice

1. Când acţionează constructorul unei clase? viata, sau poate fi solicitat prin program, cu
Constructorii acţionează de fiecare dată când operatorul delete.
se crează noi instanţe ale clasei. 3. Când este absolut necesară definirea unui
2. Când acţionează destructorul unei clase? constructor de copiere?  - in situtiile in care
Destructorii acţionează în sens invers, un tip de date are ca membrii pointeri, este
complementar, faţă de constructori. Adică necesara implementarea unui constructor de
destructorul este apelat automat la eliminarea copier.
unui obiect, la încheierea timpului sau de 4. Când se justifică utilizarea funcţiilor inline? –
utilizarea functiei inline se justifica doar in

134
Clase şi obiecte
situatiile in care codul generat de compilator 14. Ce sunt destructorii ? Destructorii sunt metode
pentru executia corpului functiei este mai mic ale claselor care actionează în sens invers,
decat codul generat pentru apel si revenire. complementar, fata de constructori. Destructorul
5. Caracteristicile destructorului unei clase. elibereaza memoria alocata de constructori.
- Destructorul are acelaşi nume ca şi clasa a căror 15. Ce sunt funcţiile inline? in situatiile in care
metodă este; corpul functiei apelate este format din cateva
-Numele destructorului este precedat de semnul ~; instructiuni, operatiile implicate in apel si
-O clasă are un singur destructor; revenire pot fi mai complicate decat un apel
-Destructorul nu are parametri şi nu returnează prin expandare(in care apelul functiei in
nici o valoare (antetul nu conţine cuvântul cheie functia apelanta este inlocuit cu insusi corpul
void, iar în corpul destructorului nu apare functiei apelate).Pt eliminarea acestor
instrucţiunea return;); dezavantaje se folosesc functiile inline.
-Dacă programatorul nu a definit un destructor, 16. Ce este o metodă?
compilatorul generează automat un destructor -metode:functiile membre, functiile declarate
pentru clasa respectivă; sau definite in cadrul clasei
- Destructorii se apelează la încheierea timpului 17. Constructorii unei clase pot primi ca
de viaţă a obiectelor, în ordine inversă apelurilor parametri instanţe ale clasei respective? Dacă
constructorilor; da, în ce condiţii? - NU
- Obiectele dinamice nu se distrug automat, 18. Ce sunt funcţiile prietene? functiile
deoarece doar programatorul ştie când nu mai este prietene(friend) sunt functii ne-membre ale
necesar un astfel de obiect. unei clase, care au acces la datele member
private ale clasei.
6. Care este utilitatea moştenirii? Prin moştenire, 19. Cine impune comportamentul unui obiect?
un obiect poate prelua proprietătiile obiectelor -comportamentul unui obiect este determinat
din clasa de bază. de catre actiunile pe care obiectul poate sa le
7. Care sunt deosebirile între o funcţie membră a execute(metodele)
unei clase şi o functie prietenă a unei clase? 20. Cum se alocă memoria pentru datele membre
Spre deosebire de funcţiile member, funcţiile nestatice în momentul declarării mai multor
prietene ale unei clase nu posedă pointerul obiecte din aceeasi clasă? pentru data membra
implicit THIS. i se realizeaza o copie pentru fiecare instanta a
8. Ce fel de metode pot acţiona asupra datelor clasei
membre statice ale unei clase? 21. Cum se declară funcţiile prietene? Se
- metode statice utilizează “friend”
-metode obisnuite 22. Deosebiri între stucturi şi clase.
9. Ce funcţii au acces la membrii privaţi ai unei -la structure membrii (datele si metodele) sunt
clase? – functiile prietene implicit publici, iar la clase implicit private
10. Ce observaţie aveţi în legătură cu metodele -modul de memorare a datelor membre
definite în interiorul clasei şi funcţiile inline? 23. Enumerati facilitatile oferite de programarea
– in cazul metodelor unei clase, daca acestea orientata obiect.
sunt definite in interiorul claei, ele sunt 1. abstractizarea datelor;
considerate, implicit, functii inline. 2. moştenirea;
11. Ce operator permite referirea unui membru al 3. încapsularea (ascunderea) informaţiei;
structurii ? – operatorul de selectie 4. legarea dinamică (“târzie”).
12. Ce sunt clasele? O clasa reprezintă un tip
abstract de date, care incapsulează atât 24. Explicaţi conceptul de încapsulare a datelor. –
elementele de date pentru care s-a abordat un membrii private (incapsulati, ascunsi) ofera
anumit mod de reprezentare, cat si operatiile datelor member ale fiecarei instante a clasei si
asupra datelor. detalii de implementare particulare clasei
13. Ce sunt constructorii impliciţi? În cazul în respective.
care o clasă nu are nici constructor declarat 25. Explicaţi în câteva cuvinte ce este mostenirea
de către programator, compilatorul generează multiplă. – o clasă poate să moştenească mai
un constructor implicit, fără nici un multe clase de bază, cee ace înseamnă că toţi
parametru, cu lista instrucţiunilor vidă. Dacă membrii claselor de bază vor fi mosteniti de
există un constructor al programatorului, catre clasa derivate. IN aceasta situaţie apare
compilatorul nu mai generează constructorul mecanismul mostenirii multiple.
implicit.

135
Clase şi obiecte
26. Explicaţi în câteva cuvinte ce este moştenirea. <nume_clsa>::<nume_functie_membru> si
Moştenirea este o caracteristică a limbajelor defineste domeniul (scopul) in care acea
de programare orientate obiect, care permite functie va fi recunoscuta.
refolosirea codului şi extinderea 31. Prin ce se caracterizează datele membre
funcţionalităţii claselor existente. Mecanismul statice? – exista într+un singur exemplar,
moştenirii permite crearea unei ierarhii de comun, pentru toate instantele clasei
clase şi trecerea de la clasele generale la cele 32. Prin ce se realizează comunicarea între
particulare. obiectele unei clase? – prin operatori
27. Niveluri de acces la membrii şi metodele unei 33. Prototipul constructorului de copiere. – pentru
clase. TIP: tip (const tip &)
-Niveluri:private, protected, public,friend 34. Nici funcţiile prietene, nici metodele statice
-Metodele: statice, dinamice ale unei clase nu primesc ca argument implicit
28. O clasă poate avea mai mulţi desctructori? pointerul this. Explicaţi care sunt, totuşi,
Dacă da, în ce condiţii?- NU diferenţele dintre ele. - deoarece o metada
29. O clasă poate fi prietenă a altei clase ? Dacă static se apeleaza independent de un obiect al
da, ce înseamnă acest lucru? Fiecare metoda a clasei, pointerul THIS nu mai poate fi utilizat.
clasei prietena este metoda celeilalte clase Metodele statice apartin clasei respective,
30. Operatorul :: şi rolul său. – Operatorul functiile prietene nu.
scope :: cuplează

Chestiuni practice

1. Completaţi tipul de date complex, cu funcţiile (membre sau prietene) care vor realiza următoarele
operaţii: Adunarea unei date de tip complex cu o dată de tip real; scăderea a două date de tip complex;
scăderea unui real dintr-un complex; împărţirea a două date de tip complex; înmulţirea unui real cu un
complex; ridicarea la o putere întreagă a unei date de tip complex; compararea a două date de tip
complex.
2. Să se scrie un program care citeşte câte două date de tip complex, până la întâlnirea perechii de date
(z1=0+i*0, z2=0+i*0). Pentru fiecare pereche de date, să se afişeze suma, diferenţa, produsul şi câtul.
3. Să se scrie un program care citeşte datele a, b, c de tip complex, rezolvă şi afişează rădăcinile ecuaţiei de
2
gradul doi: ax +bx+c=0.
4. Care sunt greşelile din următoarele secvenţe?
) class ex1{
char *nume; int lungime;
void init (char *s, int l)
{strcpy(nume, s); lungime=l;}
};
ex1 A; A.init("teava", 20);
) union numar{
private:
char exponent, mantisa[3];
public:
char exp();
};
) class complex{
int real, imag;
complex (int x, int y)
{real=x; imag=y;}
};
void main()
{ complex Z(20, 30); }

136
Clase şi obiecte

137

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