Sunteți pe pagina 1din 15

Teste recapitulative:

Specificai varianta corect :


1.

Clasa

class c { float a;
void afisisare();
}

are membrii:
a). publici;
c). protected;
2.

b). privai
d). date private i metode pubice.

Fie secvena:
class c {....};
void main()
{ c e
/* instructiuni */
}

n acest caz:
a). c este un obiect i e este clas;
b). c este o instana a clasei i e este un obiect;
c). c este o clasa i e este un obiect;
d).descrierea este eronat deoarece se folosete acelai identificator pentru
obiect.
3.

clas i

Avnd declaraia:
class persoana {
char nume[20];
int varsta;
public:
persoana();
int spune_varsta() { return varsta;}
};
void main()
{persoana p;
cout<<p.nume<<p.varsta;
}

n acest caz :
a). programul afiseaz numele i vrsta unei persoane;
b). nu este permis afisarea datelor unei persoane;
c). descriere eronat pentru c funcia membra nu este utilizat;
d). afiseaz doar vrsta unei persoane.

4. Fie clasa :
class c { int a,b;
public:
float c (int, int)
int det_a {return a;}
c (); }

Declaraia float c(int, int) ar putea corespunde unui constructor al clasei?


a). da, fiind o suprancarcare a celui existent;
b). nu, deoarece creaz ambiguitate;
c). nu, deoarece constructorul nu are tip returnat;
d). nu, deoarece nu este de tip friend.
5.

Fie declaraia :
class c1 {int a ;}
class c2 :public c1
{ public :
int b ;
void scrie_a() {cout<<a ;}
}
void main ()
{ c2 ob ;
ob.scie_a () ;
}

Selectai afirmaia corect :


a). funcia scrie_a() nu are drept de acces asupra unui membru privat;
b). programul afiseaz valoare lui a;
c). derivarea public este incorect relaizat;
d). prin derivare public, accesul la membrii moteniti devine public.
6. Fie declaraia
class c1{/* instructiuni */}
class c2:public c1 {/* .*/}

Atunci clasa c2 faa de clasa c1 este:


a). derivat;
b). de baz; c). friend

d). virtual.

7. n secvena urmtoare:
class cls { public:static int s;};
int cls::s=0;
int main(){int i=7;cls::s=i;cout<<cls::s;}

Utilizarea lui s este:


a). ilegal, deoarece nu exist nici un obiect creat;
b). ilegal, deoarece variabilele statice pot fi doar private;
c). ilegal, deoarece s este dublu definit, n clas i n afara ei;
d). corect, deoarece membrii statici exist nainte de a se crea obiecte din clasa.

8. Secvena urmatoare:
class persoana
{ int varsta, salariul;
friend ostream & operator<<(ostream &out,persoana p)
{out<<p.varsta<< <<p.salariul; return out;}
public:
persoana(int v){varsta=v;salariul=0;}
persoana(){varsta=0;salariul=0;}
}
int main()
{persoana p(1);cout<<p;}

Afiseaz:
a). afiseaz 1 0;
c). afiseaz 1 1;

b). afiseaz 0 0
d). afiseaz 0 1.

9. Secvena urmatoare:
class vector{int*pe,nr_c;
public:
operator int(){return nr_c;}
vector(int n){
pe=new int[n];nr_c=n;
while(n--) pe[n]=n;}
void f(int i){cout<<i<<endl;}
int main()
{vector x(10); f(x)}

Afiseaz:
a). 10 b). 9
c). numerele de la 1 la 10
d). numerele de la 0 la
10. Secvena urmatoare:
class vector{int*pe,nr_c;
public:
operator int(){return nr_c;}
vector(int n){
pe=new int[n];nr_c=n;
while(n--) pe[n]=n;}
void f(int i){cout<<i<<endl;}
int main()
{vector x(10); f(x)}

Afiseaza:
a). 10
b). 9

c). numerele de la 1 la 10
d). numerele de la 0 la 9
11. Secvena urmatoare:
class persoana
{int varsta;
public:
persoana(int v=18){varsta=18;}
operator int(){return varsta;}
persoana& operator++()
{varsta++;return *this;}
persoana operator ++(int)
{persoana aux=*this;varsta++;return aux;}
int main(){
persoana p(20);
int x=p++,y=++p;
cout<< x<< y ;}

Afiseaz:
a).20 20;
b).20 21 ;
c).21 22;
d).20 22.
12 . Fie secvena :
class c { int a;
public: c();
c(const c&);
void operator=(c&);}
int main()
{ c a;
//instructiuni;
c b=a;}

Linia c b=a; determin:


a). execuia constructorului de copiere;
b). execuia metodei prin care se supraincarc operatorul =;
c). execuia att a constructorului de copiere, ct i a metodei operator =;
d). execuia contructorului implicit

13. Se consider urmatoarea secvena de program:


class complex
{
double real;
double imag;

public:
complex(double x=10.0, double y=10.0){real=x; imag=y;}
complex(const complex &u)
{
real=u.real;
imag=u.imag;
}
..............
}

Precizai n care situatie se realizeaza o copiere a unui obiect n alt obiect:


a) complex z1(3.42, -12.9);
b) complex z2=z1;
c) complex z3(1.0,-1.0);
d) complex z(10.7,0.8);
e) complex z(23.25);

14. Se consider urmatoarea secventa de program:


class complex
{
double re;
double im;
public:
complex(double x=-11.0, double y=-56.90){re=x; im=y;}
complex( const complex &u)
{
real=u.re;
imag=u.im;
}
............
}

Precizati n situatie se utilizeaza constructorul de copiere:


a) complex z1(3.4, -12.9);
b) complex z3(0.0,-10.9);
c) complex z2(0.0,1.0);
d) complex z3(z1);
e) complex z(2.25);
15. Se considera urmatoarea secventa de program:
class complex
{
double real;
double imag;
public:
complex(double x=-11.0, double y=-56.90){real=x; imag=y;}
complex( const complex &u)

{
real=u.real;
imag=u.imag;
}
..............

}
Precizati situatia n care nu era necesara folosirea unui constructor cu parametri care iau
valori n mod implicit:
a) complex z2(3.42,-12.9);
b) complex z3(z2);
c) complex z=z2;
d) complex z4(z);
e) complex z5=z4;
16. Se d secvena de program:
class A
{
int a[3];
public:
A(int i, int j, int k){a[0]=i; a[1]=j; a[2]=k;}
int &operator[](int i){return a[i];}
};
void main(void)
{
A ob(1,2,3);
cout << ob[1];
ob[1]=25;
cout<<ob[1];
}

Ce se poate afirma despre operator[]()?


a) produce suprancarcarea unei funcii;
b) produce suprancarcarea unui operator unar;
c) suprancarca operatorul [];
d) este o funcie membru oarecare a clasei A care nu produce suprancarcarea unui
operator;
e) reprezinta un operator ternar;
17. Suprancarcarea unor operatori se poate realiza prin funcii operator sau funcii friend.
Diferenta ntre aceste doua posibilitati consta n:
a) lista de parametri;
b) obiect returnat;
c) precedent a operatorilor;
d) n-aritatea operatorului;
e) alte situatii.

18. In secventa de program:


.................
int k=100;
void fct()
{
int k;
...........
k++;
...........
}
void gct()
{
int k=2;
...........
::k++; // (?)
...........
}

In instructiunea marcata cu (?), k este o variabila:


a) externa;
b) statica;
c) registru;
d) globala;
e) automatica;
19. Se considera secvena de program:
class B1 { class D1:public B1,public B2 {
public: public:
B1(){cout<<"(1)\n";} D1(){cout<<"(7)\n";}
~B1(){cout<<"(2)\n";} ~D1(){cout<<"(8)\n";}
}; };
class B2 { class D2:public D1,public B3 {
public: public:
B2(){cout<<"(3)\n";} D2(){cout<<"(9)\n";}
~B2(){cout<<"(4)\n";} ~D2(){cout<<"(10)\n";}
}; };
class B3 {
public:
B3(){cout<<"(5)\n";}
~B3(){cout<<"(6)\n";}
};
void main(){
D1 ob1;
D2 ob2;
}

Care mesaj se va scrie?


a) (1),(3),(7),(3),(5),(7),(9),(10),(6),(8),(4),(2),(2),(3),(2),(2);

b) (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(9),(7),(2),(3),(2),(2);
c) (1),(3),(7),(1),(3),(7),(5),(9),(10),(6),(8),(4),(2),(8),(4),(2);
d) (1),(3),(5),(7),(9),(2),(4),(6),(6),(8),(8),(10),(2),(2),(4),(2);
e) (1),(3),(7),(1),(3),(7),(9),(5),(10),(6),(4),(8),(2),(8),(4),(2);
20. Spunei dac programul de mai jos este corect. n caz afirmativ, spunei ce afieaz, n
caz negativ spunei de ce nu este corect. #include <iostream.h>
template <class tip>
class cls
{ tip z;
public: cls(tip i) { z=i; }
tip operator-(cls); };
template <class tip>
tip cls<tip>::operator-(cls<tip> a)
{ return z-a.z;
}
template <class tip>
tip dif(tip x, tip y)
{ return x-y;
}
int dif(int x, int y)
{ return x>=y?x-y:y-x;
}
int main()
{ cls<int> i=3; cls<float> j=4;
cout<<dif(i,j);
return 0;
}

21. Descriei pe scurt cum putei prelua o dat prin incluziune i a doua oar prin motenire o
clas numar ntr-o clas lista care descrie liste nevide de dimensiune variabil de
elemente de tip numar.
22. Spunei dac programul de mai jos este corect. n caz afirmativ, spunei ce afieaz, n
caz negativ spunei de ce nu este corect.
#include<iostream.h>
class cls
{ static int x;
public: cls(int i=25) { x=i; }
friend int& f(cls); };
int cls::x=-13;
int& f(cls c) { return c.x; }
int main()
{ cls d(15);
cout<<f(d);
return 0;

23. Spunei dac programul de mai jos este corect. n caz afirmativ, spunei ce afieaz, n
caz negativ spunei de ce nu este corect.
#include<iostream.h>
class cls
{ int v,nr;
public: cls(int i) { nr=i; v=new int[i]; }
friend int& operator[](int);
friend ostream& operator<<(ostream&,cls); };
int& operator[](cls& x, int i)
{ return x.v[i]; }
ostream& operator<<(ostream& o, cls x)
{ for(int i=0;i<x.nr;i++) cout<<x.v[i]<< ; return o; }
int main()
{ cls x(10);
x[5]=7;
cout<<x;
return 0;
}

24. Spunei dac programul de mai jos este corect. n caz afirmativ, spunei ce afieaz, n
caz negativ spunei de ce nu este corect.
#include<iostream.h>
class cls
{ static int i;
int j;
public: cls(int x=7) { j=x; }
static int imp(int k){ cls a; return i+k+a.j; } };
int cls::i;
int main()
{ int k=5;
cout<<cls::imp(k);
return 0;
}

25. Spunei dac programul de mai jos este corect. n caz afirmativ, spunei ce afieaz, n
caz negativ spunei de ce nu este corect.
#include<iostream.h>
class cls
{ int x;
public: cls(int i=32) { x=i; }
int f() const; };

int cls::f() const { return x++; }


void main()
{ const cls d(-15);
cout<<d.f();
}

26. Spunei dac programul de mai jos este corect. n caz afirmativ, spunei ce afieaz pentru
o valoare ntreag citit egal cu 7, n caz negativ spunei de ce nu este corect.
#include <iostream.h>
float f(float f)
{ if (f) throw f;
return f/2;
}
int main()
{ int x;
try
{
cout<<Da-mi un numar intreg: ;
cin>>x;
if (x) f(x);
else throw x;
cout<<Numarul <<x<< e bun!<<endl;
}
catch (int i)
{ cout<<Numarul <<i<< nu e bun!<<endl;
}
return 0;
}

27. Descrieti trei metode de proiectare diferite prin care elementele unei clase se pot regsi n
dublu exemplar, sub diverse forme, n definitia altei clase.
28. Spuneti dac programul de mai jos este corect. n caz afirmativ, spuneti ce afiseaz, n
caz
negativ spunei de ce nu este corect.
#include<iostream.h>
class B
{ int x;
public: B(int i=10) { x=i; }
int get_x() { return x; } };
class D: public B
{ public: D(int i):B(i) {}
D operator+(const D& a) {return x+a.x; } };
int main()
{ D ob1(7), ob2(-12);
cout<<(ob1+ob2).get_x();
return 0;

29. Spunei dac programul de mai jos este corect. n caz afirmativ, spuneti ce afiseaz, n
caz
negativ spuneti de ce nu este corect.
#include<iostream.h>
class B
{ public: int x;
B(int i=16) { x=i; }
B f(B ob) { return x+ob.x; } };
class D: public B
{ public: D(int i=25) { x=i; }
B f(B ob) { return x+ob.x+1; }
void afisare(){ cout<<x; } };
int main()
{ B *p1=new D, *p2=new B, *p3=new B(p1->f(*p2));
cout<<p3->x;
return 0;
}

30. Spunei ce este obiectul implicit al unei metode si descrieti pe scurt propriettile pe care
le
cunoasteti despre acesta.
31. Spuneti dac programul de mai jos este corect. n caz afirmativ, spuneti ce afiseaz, n
caz
negativ spuneti de ce nu este corect.
32. Spuneti dac programul de mai jos este corect. n caz afirmativ, spuneti ce afiseaz, n
caz
negativ spuneti de ce nu este corect.
#include<iostream.h>
class cls
{ int x;
public: cls(int i=-20) { x=i; }
const int& f(){ return x; } };
int main()
{ cls a(14);
int b=a.f()++;
cout<<b;
return 0;
}

33. Descriei pe scurt mostenirea virtual si scopul n care este folosit.


34. Spunei dac programul de mai jos este corect. n caz afirmativ, spuneti ce afiseaz, n
caz

negativ spuneti de ce nu este corect.


#include<iostream.h>
class B
{ static int x;
int i;
public: B() { x++; i=1; }
~B() { x--; }
static int get_x() { return x; }
int get_i() { return i; }
};
int B::x;
class D: public B
{ public: D() { x++; }
~D() { x--; }
};
int f(B *q)
{ return (q->get_i())+1;
}
int main()
{ B *p=new B;
cout<<f(p);
delete p;
p=new D;
cout<<f(p);
delete p;
cout<<D::get_x();
return 0;
}

35. Spuneti dac programul de mai jos este corect. n caz afirmativ, spuneti ce afiseaz, n
caz
negativ spuneti de ce nu este corect.
#include<iostream.h>
class B
{ int x;
public: B(int i=17) { x=i; }
int get_x() { return x; }
operator int() { return x; } };
class D: public B
{ public: D(int i=-16):B(i) {} };
int main()
{ D a;
cout<<27+a;
return 0;
}

36. Enumerai 3 metode de implementare a polimorfismului de compilare.

37. Spuneti dac programul de mai jos este corect. n caz afirmativ, spuneti ce afiseaz, n
caz
negativ spuneti de ce nu este corect.
#include<iostream.h>
class cls
{ static int x;
public: cls (int i=1) { x=i; }
cls f(cls a) { return x+a.x; }
static int g() { return f()/2; } };
int cls::x=7;
int main()
{ cls ob;
cout<<cls::g();
return 0;
}

38. Spuneti dac programul de mai jos este corect. n caz afirmativ, spuneti ce afiseaz, n
caz
negativ spuneti de ce nu este corect.
#include<iostream.h>
class cls
{ int *v,nr;
public: cls(int i=0) { nr=i; v=new int[i];
for (int j=0; j<size(); j++) v[j]=3*j; }
~cls() { delete[] v; }
int size() { return nr; }
int& operator[](int i) { return v[i]; }
cls operator+(cls); };
cls cls::operator+(cls y)
{ cls x(size());
for (int i=0; i<size(); i++) x[i]=v[i]+y[i];
return x; }
int main()
{ cls x(10), y=x, z;
x[3]=y[6]=-15;
z=x+y;
for (int i=0; i<x.size(); i++) cout<<z[i];
return 0;
}

39. Descrieti pe scurt mecanismul de tratare a exceptiilor.


40. Spunei dac programul de mai jos este corect. n caz afirmativ, spuneti ce afiseaz, n
caz

negativ spuneti de ce nu este corect.


#include<iostream.h>
class B
{ int i;
public: B() { i=1; }
int get_i() { return i; }
};
class D: public B
{ int j;
public: D() { j=2; }
int get_j() {return j; }
};
int main()
{ B *p;
int x=0;
if (x) p=new B;
else p=new D;
if (typeid(p).name()=="D*") cout<<((D*)p)->get_j();
return 0;
}

41. Spuneti dac programul de mai jos este corect. n caz afirmativ, spuneti ce afiseaz, n
caz
negativ spuneti de ce nu este corect.
#include <iostream.h>
class cls
{ int x;
public: cls(int i) { x=i; }
int set_x(int i) { int y=x; x=i; return y; }
int get_x(){ return x; } };
int main()
{ cls *p=new cls[10];
int i=0;
for(;i<10;i++) p[i].set_x(i);
for(i=0;i<10;i++) cout<<p[i].get_x(i);
return 0;
}

42. Descriei pe scurt diferenta dintre un pointer si o referint.


43. Spuneti dac programul de mai jos este corect. n caz afirmativ, spuneti ce afiseaz, n
caz
negativ spuneti de ce nu este corect.
#include <iostream.h>
template<class T>

int f(T x, T y)
{ return x+y;
}
int f(int x, int y)
{ return x-y;
}
int main()
{ int a=5;
float b=8.6;
cout<<f(a,b);
return 0;
}

44. Spunei pe scurt prin ce se caracterizeaz un cmp static al unei clase.


45 . Spunei dac programul de mai jos este corect. n caz afirmativ, spunei ce afieaz, n
caz negativ spunei de ce nu este corect. #include<iostream.h>
class cls1
{ public: int
cls1() { a=7;
class cls2
{ public: int
cls2(int i) {
cls2(cls1& x)
int main()
{ cls1 x;
cout<<x.a;
cls2 y(x);
cout<<y.b;
return 0; }

a;
} };
b;
b=i; }
{ b=x.a; } };

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