Sunteți pe pagina 1din 18

1.

Un obiect are următoarele caracteristici :

             a. polimorfism, moştenire, virtualitate, supraîncărcare


 b. identitate, clasificare, polimorfism, moştenire 
 c. identitate, moştenire, abstractizare, generalizare. 

2. În C++ variabilele pot fi declarate : 

             a. la începutul programului 


b. la începutul unui bloc dar înainte de orice instructie executabilă 
              c. în orice punct dintr-un bloc. 
 

3. În fragmentul de program de mai jos este eronată linia-sursă nr. :

 class stiva{ // 1 
int stiv[SIZE]; // 2 
int virf_stiva; // 3
public: // 4 
void init(); // 5
void pune(int ); // 6 
int scoate(); // 7 
 }; // 8 
… main() // 9 
{ // 10 
stiva st1, st2; // 11 
st1.pune(44); // 12 
st2.pune(122); // 13 
st1.virf_stiva=11; // 14 
cout << st1.scoate() << “\n”; // 15 
cout << st2.scoate() << “\n”; // 16 
return 0; // 17 
} // 18 

Raspunsuri :    
a. 7,13
b. 11
c. 14  

4. Moştenirea permite : 

         a. o clasificare generală care să fie încorporată în unele particulare


  b. o structurare a informatiei
 c. o simplificare a notatiei

5. O referinta este:

a. o valoare fixată (valoare de referintă)


      b. un pointer implicit, care actionează ca un alt nume al unui obiect 
c. un pointer implicit care trebuie invocat sub formă de pointer cu numele obiectului. 

6. Cum este corect? 

        a. int *p; p=new int[10]; 


b. int *p; p=(int) new [10];
c. int *p; p=int new [10]; 

7. Cum se face diferentierea la supraîncărcarea functiilor? 

void supra(int *p); 


void supra(int p[]);

 a. prin faptul că una are un parametru pointer la întreg, iar cealaltă la o listă de întregi 
 b. a doua functiie e eronată 
         → c. amândouă sunt acelaşi lucru, deci nu e nici o diferentiere. 

8. Constructorii pot fi supraîncărcatii? 

a. nu 
b. da 
c. depinde. 

9. La apelul prin intermediul unui pointer, a unei funcții supraîncărcate, cum se poate face
diferenta între funcții? 

a. prin declararea corespunzătoare a functiilor supraîncărcate 


   b. prin declararea corespunzătoare a pointerului 
   c. printr-o sintaxă specială. 

10. În codul sursă de mai jos instructia marcată cu $ este: 

class cladire { 
int camere; 
int etaje; 
public:
 void nr_camere(int); 
 int cite_camere(); 
 void nr_etaje(int); 
 int cite_etaje(); 
}; 
class apartament:public cladire { 
int dormitoare; 
public: void nr_dormitoare(int): 
            int cite_dormitoare(); 
};
... 
main() { 
apartament ap;
ap.nr_dormitoare(2); 
ap.nr_camere(5); // ($) 
... 

a. corectă dacă cuvântul-cheie de la clasa apartament e schimbat în private


b. incorectă
c. valida

11. Obiectele locale sunt distruse: 

a. la întâlnirea instructiei return 


→ b. la parasirea blocului
c. la sfarsitul programului

12. O uniune nu poate avea ca membră 

a. functii void 
b. variabile de tip static 
c. functii. 

13. O clasă derivată 

a. nu poate moşteni functii friend 


b. câteodată poate moşteni functii friend 
c. poate moşteni functii friend. 

14. Linia marcată cu ´$´ este:

 .... 
class param { 
int a; 
public: param(int i) {a=i;}
 ..... }; 
.....
main() { 
param ob=5; // ($) 
.... 
return 0; }

a. incorectă 
 b. corectă 
 c. incorectă în cele mai multe contexte. 

15. Clasa de mai jos permite implementarea 

class clas1{ 
static int a; 
public: int f1(); 
void f2(){a=0;}
 };
int clas1::a; 
 int clas1::f1() { 
  if (a) return 0; 
else { a=1; return 1; }
 }

a. unui mecanism de tratare a erorilor 


b. controlului accesului la o resursă comună  ??
c. accesului independent de obiecte.

16. În fragmentul de program de mai jos compilatorul va semnala eroare. De ce ? 


class baza { 
int i,j; 
  public: voi setare(int a, int b) {i=a; j=b;} 
           void arata() {cout << I << “ “ << j << “\n”;}
 }; 
class derivat:public baza { 
int k;
 public: 
void setk() {k=i+j;} 
void aratak() {cout << k << “\n”;} 
};

 a. k trebuie declarat public 


 b. i şi j fiind private, clasa derivat nu are acces la ele 
 c. clasa derivat trebuie să aibă specificatorul de acces private. 

16. Un manipulator este: 

a. un operator care modelează un stream şi primeşte ca parametru şi întoarce ca rezultat


adresa stream-ului asupra căruia actionează 
b. o instructiune de modificare şi conversie a unor valori de intrare sau de ieşire 
c. un operator binar care specifică sensul fluxului şi dispozitivul cu care lucrează. 

18. Operatorul + din exemplul de mai jos este corect supraîncărcat ? 


class exemplu { // 1 
int a,b; // 2
 public: // 3 
exemplu() {} // 4 
exemplu(int i, int j) {a= i; b=j; } // 5 
void arata(){cout<< i << “ “ << j << “\n”;} // 6 
void operator+(exemplu ex); // 7 
}; // 8 
void exemplu::operator+(exemplu ex) // 9 
{ // 10 
exemplu tmp; // 11 
tmp.a=ex.a+a; // 12 
tmp.b=ex.b+b; // 13 
return tmp; // 14 
} // 15 

a. da 
         b. nu, greşeala e la linia 14, trebuie return 0; 
c. nu, greşeala e la liniile 7 şi 9, functia trebuie să fie de tipul exemplu. 

19. O functie virtuală pură este o functie : 

a. care este declarată cu cuvântul-cheie virtual în clasa de bază 


b. care este declarată cu cuvântul-cheie virtual în clasa de bază şi are obligatoriu
definiri diferite în toate clasele derivate 
         c. care este declarată cu cuvântul-cheie virtual în clasa de bază şi nu are definitie în clasa de
bază. 

20. Un obiect este :

a. o abstractizare a unei clase


b. o instatiere a unei clase
c. o structura a clasei

21. O clasa derivata are acces:

a. la proprii membri si la toti membrii clasei de baza


b. la functiile sale membre si la variabilele membre ale clasei de baza
c. la proprii membri si al membrii publici ai clasei de baza

22. Constructorul clasei derivate:

a. nu trebuie sa declare parametrii constructorului clasei de baza


b. trebuie sa declare atat parametrii proprii de apel cat si parametrii de apel ai clasei de baza
c. nu are voie sa contina declaratii ale parametrilor de apel ai clasei de baza

23. Functiile friend:


a. le sunt pasat pointeri this
b. le sunt pasati pointeri this de un tip special 
c. nu le sunt pasati pointerii this

24. In cadrul unei clase, declararea unei variabile static:

a. aloca o singura data memorie


b. aloca memorie la fiecare creare a unui obiect de tipul clasei
c. nu aloca memorie pentru acesta
25. Utilizarea functiilor inline este recomandata pentru:

a. functii recursive
b. functii scurte
c. functii optimale

26. Daca o clasa de baza este mostenita private, toti membrii publici ai clasei respective devin
in clasa derviata membri:

a. publici
b. privati
c. protejati

27. In lipsa specificatorilor public, protected sau private toti membrii unei union vor fi implicit: 

a. publici
b. privati
c. protejati

28. Daca avem o clasa carte si constructorul acesteia de forma carte(char* x, char* y, int y);
atunci un obiect initializat se va declara:

a. carte(“Titlul”,”Autor1”,4)
b. carte c();
c. carte c(“Titlu1”, “Autor1”, 4)

29. Un constructor poate returna:

a. numai tipuri de date predefinite in C sau C++


b. nu poate returna o valoare
c. tipuri de date definite ale programatori sau tipuri de date predefinite in C sau C++

30. Secventa urmatoare de cod va afisa:

    ….
    char s[10]=”abc”;
    void main()
    {
char s[10]=”xyz”;
cout << s;
   }

a. abc;
b. xyz;
c. eroare
31. Urmatoarea secventa de cod va afisa:

     …
void main()
{
int a=10, *p;
p=&a;
cout<<*p;
}

a. 10;
b. o adresa de memeorie;
c. eroare

32. Secventa urmatoare de cod va afisa:



void numar(int &nr)                       
{
nr=10;
}
void main()
{
int a=20;
numar(a);
cout<<a;
}

a. 20;
b. eroare;
c. 10

33. Secventa urmatoare de cod va afisa: 



class A{
    void a(){cout << "mesaj 1A";};
protected:
   void b(){cout << "mesaj 2A";};
public:
   void c(){cout << "mesaj 3A";};
};

class B:public A{
    void x(){cout << "mesaj 1B";};
protected:
   void y(){cout << "mesaj 2B";};
public:
   void z(){cout << "mesaj 3B";};
};

int main()
{
    B object;
    object.z();
    object.A::c();
    system("pause");
}

a. mesaj 3B mesaj 3A;


b. mesaj 3A mesaj 3B;
c. eroare;

34. Clasa urmatoare are:



clasa A
{
int e;
public: int a,b;
           int c;
protected: int d;
};

a. 2 membri private, 2 membri publici, 1 membru protected


b. 1 membru privat, 3 membri publici, 1 membru protected
c. 1 membru privat, 2 membri publici, 2 membri protected

35. Tipurile de operatii sunt:

a. ortogonale, primitive, compozite, colectii, containere


b. binare, constructor, destructor, primitive, ne-primitive
c. contructor, destructor, modificator, selector, iterator

36. Secventa urmatoare de cod va afisa:


 
class A
{
int a;
public:
     A(){a=3}
    virtual void afisarea(){cout<<”a=”<<a;}
};
class B: public A
{
  int b;
  public:
B(){b=5;}
virtual void afisare(){cout<<”b=”<<b;}
};
void main()
{
A *pA = new A;
pA->afisare();
B obj;
pA =&obj;
pA->afisare();
}

a. a=3 b=5;
b. a=3 a=3;
c. b=5 b=5;

37. Care este sintaxa corecta la initializare, pentru casa urmatoare?



class cl{
 int i;
 int j;
public:
el(int k, int l){i=k; j=l;}
int returneaza_i(){return i;}
int returneaza_j(){return j;}
};

a. cl ob[3] = (1,2),(3,4),(5,6)
b. cl ob[3] = {cl(1,2),cl(3,4),cl(5,6)}
c. cl ob[3] ={(1,2),(3,4),(5,6)}

38. Datele membre statice:


 
a. Nu li se poate atribui o valoare
b. Pot fi utilizati doar in functii statice
c. Nu pot fi accesati in afara clasei

39. Accesul la date private sau metode private dintr-o clasa este:

a. Restrictionat la metodele din aceeasi clasa


b. Restrictional la metodele altor clase
c. Disponibil pentru metodele din aceiasi clasa si din alte clase

40. O exceptie este: 

a. o variabila transmisa dispre zona de cod unde a aparut problema catre o zona de cod care
trebuie sa o rezolve
b. o clasa standard de tratare a situatiei anormale de functionare
c. un obiect sau o valoare de tip standard a carui adresa este trimisa dispre zona de cod unde a
aparut problema catre o zona de cod catre trebuie rezolvata
41. Avand secventa de program:

class bbb{
 int i;
public:
 …
};
….
bbb obiect;
cout << obiect.i;

a. Secventa este corecta.


b. Secventa de cod nu este corecta deoarece trebuia scris cout << x;
c. Secventa de cod nu este corecta, deoarece nu avem acces la membri privati ai uneui clase

42. Un manipulator este:


a. o instructiune de modificare si conversie a unor valori de intrare sau de iesire
b. un operator binar care specifica sensul fluxului si dispozitivului cu care lucreaza
c. un operator care modeleaza un stream si primeste ca parametru si intoarce un rezultat
adresa stream-ului aspra caruia actioneaza

43. In fragmentul de program de mai jos este eronata linia-sursa nr:


 …
class stiva{         // 1
  int stiv[100];     // 2
  int varf_stiva;   // 3
public:  //4
 void init(); //5
void punem(int); //6
int scoate(); //7
}; //8
….
int main() //9
{ //10
  stiva st1; //11
 st1.pune(50);     // 12
 st1.varf_stiva=75; //13
cout << st1.scoate();      //14
return 0;      //15
}   //16

a. 5
b. 13
c. 12

44. Este corecta urmatoarea secventa de cod:



int functie1(int i){return i;};
int functie1(int i, int j){return i;};
int main()
{
cout << functie1(11)<< “ ”;
cout <<functie(5,4)<<endl;
return 0;
}

a. Da, deoarece functiile au numar diferit de parametri


b. Nu, deoarece au mai mult parametrii
c. Nu, deoarece este ambiguu

45. In codul sursa de mai jos instructiunea marcata  cu $ este:

class cladire{
int camere;
int etaje;
public:
int cite_camere();
};
class apartament:public cladire{
int dormitoare;
public:
void nr_dormitoare(int);
int cite_dormitoare();
};

int main()
{
apartament ap1, ap2;
ap1.nr_dormitoare(7);
ap2.nr_dormitoare(6);
ap2.camere; //($)
...
}

a. corecta daca cuvantul-cheie de la clasa apartament este schimbat in private


b. incorect
c. corecta

46. Secventa urmatoare de program:

class clasa{
public: 
int cine1, cine2;
   clasa(int,int);
     ~clasa();
};
clasa::clasa(int valint1, int valint2)
{
 cout << "initializare " << valint1;
 cout << " ," << valint2 << endl,
 cine1=valint1;
 cine2=valint2;
}
clasa::~clasa()
{
cout << "distrugere" << cine1 << " " << cine2 << endl;
}
int main()
{
    clasa local_obiect1(10,10);
    clasa local_obiect2(20,20);
    clasa local_obiect3(30,30);
    return 0;
}

a. initializare 10 ,10
      initializare 20 ,20
      initializare 30 ,30
      distrugere  30 30
      distrugere 20 20
      distrugere 10 10 

b. initializare 30 ,30
      initializare 20 ,20
      initializare 10 ,10
      distrugere  30 30
      distrugere 20 20
      distrugere 10 10 

c. initializare 10 ,10
      initializare 20 ,20
      initializare 30 ,30
      distrugere 10 10
      distrugere 20 20
      distrugere 30 30 

47. Ce se intampla la compilarea urmatorului program?


....
class baza{
  int i;
public:
void setare_i(int val){i=val;}
    int returnare_i(){return i;}
};

class derivat:public baza


{
int j;
public:
void setare_j(int val){j=val;}
    int returnare_j(){return j;}
};

int main()
{
  baza *b;
    derivat d;
    b = new baza(5);
    b->setare_i(75);
    d.setare_j(95);
    return 0;
}

a. programul este corect, deoarece se aloca dinamic memorie


b. programul nu este corect
c. programul este corect, deoarece exista functia setare_i

48. Ce se intampla la compilarea urmatorului program? 



class cl{
int i,j;
  public:
   cl(int k){k-i;}
    cl(int k, int t){k-i;t-j;}
};
int main()
{
  cl a[8];
}

a. programult este corect 


b. se semnaleaza eroare de compilare la declararea matricii de
obiecte
c. se semnaleaza eroare la definirea constructorilor

49. In ce ordine se vor afisa numerele de catre programul urmator?

#include <iostream>
#include <vector>
#include <stdafx.h>
#include <algorithm>
using namespace std;

typedef vector<int> vectsort;


int main(int argc, char* argv[])
{
vectsort v;
    v.push_back( 434 );
    v.push_back( 356 );
v.push_back( 267 );
    v.push_back( 987 );
    qsort(v.begin(), v.end());
    vector<int>::reverse_iterator iter=v.rbegin();
    while(iter != v.rend())
    {
      cout << *iter << endl;
        ++iter;
    }
    return 0;
}

a. 434,356,267,987
b. 267,356,434,987
c. 987,434,356,267

50. Este correcta urmatoarea secventa de cod?



float exemplu(float f){return f;};
double exemplu(double d){return -d;};
int main()
{
cout << exemplu(22.3)<<””;
cout << exemplu(33)<< “n”;
return 0;
}

a. Da,deoarece functiile returneaza tipuri diferite


b. Nu, deoarece nu are mai multi parametrii
c. Nu, deoarece este ambiguu

51. Ce afiseaza urmatorul program:


… 
class baza {
int i;
public:
void setare_i(int val) { i = val; };
int returnare_i() { return i; };
};

class derivat : public baza


{
int j;
public:
void setare_j(int val) { j = val; }
int returnare_j() { return j; };
};

int main() {
baza b;
derivat d;
b.setare_i(25);
d.setare_j(95);
b.setare_i(75);
cout << b.returnare_i();
return 0;
}

a. 25
b. 75
c. 95

52. Ce va afisa urmatoarea secventa de cod?

char *ptr;
ptr = “hello”;
cout << *ptr;

a. Prima litera
b. Intregul sir
c. Este eroare de sintaxa

53. Urmatoarea secventa de cod va afisa:


void suma(int a = 10, int b = 20)
{
cout << a + b;
};

int main()
{
suma(5);
}

a. 30
b. 25
c. eroare

54. Urmatoarea secventa de cod va afisa:


inline int comparare(int a, int b)
{
if (a > b)return 1;
if (a < b)return 0;
if (a == b) return -1;
}
void main()
{
int a = 20, b = 10;
cout << comparare(b, a);
}

a. 1;
b. 0;
c. -1;

55. Informatiile suplimentare trimise atunci cand se face o exceptie pot fi


plasate la:

a. Cuvantului cheie throw


b. Functiei care a cauzat eroarea
c. Blocului catch

56. In mostenirea multipla:

a. Clasele de baza trebuie sa aiba numai constructori impliciti


b. Nu pot sa fie functii virtuale
c. Pot include clase virtuale  ??

57. In care caz este obligatoriu sa folositi desctructorul ?

a. in fiecare clasa 
b. clasa a carei obiecte vor fi create dinamic
c. clasa pentru care este definit constructorul de copier

58. Cati constructori poate sa aiba o clasa?

a. 0
b. 1
c. oricati

59. Dupa rularea urmatoarei secvente de cod care este valoarea lui x?
 
  int x=22,y=10;
   x=(x-y)?(x+y):(x-y);

a. 32
b. 12
c. eroare;
60. Relatiile dintre clase sunt de tipul:

a. asociere, agregare, compozitie, generalizare, dependenta


b. colaborare, extensie, spercializare, principiul de substitutile a lui
Liskov
c. part/intreg, catalog, fizic, tip mesaj, compozitie, dependenta,
generalizare

61. Ce va afisa urmatoarea linie de cod?



int main()
{
int a[] = { 10, 20, 30 };
cout << *a + 1;
}

a. 10
b. 21
c. 11

62. Un constructor implicit al unei clase are:

a. 1 parametru
b. mai multi parametri
c. nici un parametru

63. Una dintre următoarele afirmații este valabilă pentru o functie inline:

a. Se executa mai repede, deoarece este tratată ca o macrocomanda internă


b. se executa mai repede, deoarece prioritatea este mai mare decat functia
normala
c. Nu se exectua mai repede decat o functie normala

64. Procesul prin care un obiect poate dobandi proprietățile unui alt
obiect este:

a. Mostenire
b. Polimorfism
c. Încapsulare

65. Toate limbajele de programare orientate obiect trbuie sa aiba


urmatoarele trei caracteristici:

a. Asociere, mostenire, obiecte


b. Mostenire, polimorfism, incapsulare
c. Clase, subclase, superclase
66. Funcțiile virtuale pure

a. Trebuie sa fie redefinie in clasa mostenita


b. Nu pot avea specificatii de acces publi
c. Sunt obligatorii pentru o clasa virtuala

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