Sunteți pe pagina 1din 4

PROGRAMARE ORIENTATA PE OBIECTE

1. Supraancarcarea operatorului ~~:


a) reprezinta un operator de extragere dintr-un stream;
b) poate permite compararea a doua obiecte din clasa pentru care se deIineste;
c) trebuie sa Iie o Iunctie cu doi parametri;
d) trebuie sa Iie o Iunctie care returneaza o valoare de tipul istream&;
2. Care dintre urmatorii operatori C nu pot Ii supraincarcati in cadrul claselor:
I. operatorul de apel de Iunctie '()
II. operatorul new
III. operatorul de selectie '.
IV. operatorul conditional '?:
Raspunsuri:
a) doar I si II
b) doar III si IV
c) doar I si III
d) doar II si IV
3. Care este eroarea din secventa urmatoare:
using namespace std;
class A {
int n;
public:
A(int k=0): n(k) {}
A& operator++() { n++; return *this; }
void Print() { cout << n << endl; }
};
void main() {
A a(3);
a++;
a.Print();
++a;
a.Print();
}
Raspunsuri:
a) operatorul preIix a nu este deIinit;
b) operatorul postIix a nu este deIinit;
c) operaorul de incrementare trebuie sa returneze o valoare;
d) compilatorul nu raporteaza erori;
4. Se considera secventa:
class A { ... };
class B { ... };
void f(A) { ... };
void main() {
B b;
f(b);
}
La executia Iunctiei I se apeleaza:
a) constructorul de copiere al clasei A;
b) constructorul de copiere al clasei B;
c) un constructor de conversie al clasei B, daca exista;
d) un constructor de conversie al clasei A, daca exista;
5. Se considera secventa:
class A { ... };
void f(A *pa);
A a;
const A& ca = a;
Care dintre urmatoarele variante sunt corecte:
I. I(constcastA*~(&ca));
II. I((A*)(&ca));
Raspunsuri:
a) doar I
b) doar II
c) I si II
d) nici o varianta
6. Care este eroarea din secventa urmatoare:
using namespace std;
class X {
int n;
public:
X(int k): n(k) { }
static void * operator new(size_t) throw(bad_alloc);
};
void* X::operator new(size_t) throw(bad_alloc) { ... }
void main() {
X *p;
try {
p = new X(5);
}
catch(bad_alloc) {
cerr << "Eroare alocare\n";
}
free(p);
}
Raspunsuri:
a) Un obiect creat cu new este obligatoriu sa Iie distrus cu delete;
b) Operatorul new nu poate Ii apelat intr-un bloc try;
c) Nu se mai apeleaza destructorul pentru obiectul creat cu new;
d) Obiectul cerr nu este declarat.
7. Un constructor:
a) trebuie sa Iie apelat in mod explicit;
b) poate Ii o Iunctie virtuala;
c) poate avea parametri impliciti;
d) nu poate apela alte Iunctii membre ale aceleiasi clase;
8. Un operator supraancarcat:
a) are aceeasi precedenta ca si operatorul originar;
b) nu poate avea parametri impliciti;
c) nu poate Ii un operator unar;
d) trebuie sa Iie Iunctie membru a unei clase;
9. Se considera declaratiile:
class A };
class B: public A };
Care dintre urmatoarele deIinitii sunt corecte:
I. A *p new B;
II. B *p new A;
Raspunsuri:
a) ambele variante
b) nici una
c) doar I
d) doar II
10. Operatorul de inserare in stream-uri:
a) reprezinta o supraancarcare a operatorului ~~;
b) trebuie sa Iie Iunctie membru a clasei pentru care se deIineste;
c) trebuie sa Iie Iunctie prietena clasei pentru care se deIineste;
d) trebuie sa returneze o reIerinta la clasa pentru care se deIineste;
11. Stabilirea adresei de apel a unei Iunctii in timpul executiei programului:
a) reprezinta o inIormatie de tip RTTI;
b) reprezinta legarea dinamica a Iunctiei;
c) nu este permisa de compiltoarele limbajului C;
d) este realizata in mod automat in cazul in care exista Iunctii supraincarcate;
12. Se considera secventa:

class A {
public:
int n;
// constructor de conversie
};
void f(A a) { }
void g() { f(7); }

Care dintre variantele urmatoare reprezinta o deIinitie corecta pentru secventa anterioara
a constructorului de conversie al clasei A:
I. explicit A(int k):n(k) }
II. A(int k):n(k) }
Raspunsuri:
a) ambele variante
b) nici una
c) doar II
d) doar I
13. Pentru a realiza conversia de tip de la o clasa A la o alta clasa B:
a) constructorul de conversie trebuie deIinit in clasa A;
b) operatorul de conversie trebuie deIinit in clasa A;
c) pot Ii deIiniti mai multi constructori de conversie pentru aceeasi operatie de
convenrsie;
d) se poate deIini atat un constructor de conversie, cat si un operator de conversie;
14. Se considera deIinitiile:
class C1 {
virtual void f(char c) { }
virtual void g(int c) { }
virtual void h() { }
};
class C2: public C1 {
void f(char c) { }
void g(unsigned int c) { }
void h() { }
};
Care dintre Iunctiile urmatoare sunt Iunctii virtuale:
a) doar I
b) doar I si g
c) doar I si h
d) toate trei
15. In cazul polimorIismului, tabela VFTABLE memoreaza:
a) doar adresele Iunctiilor virtuale proprii clasei respective;
b) adresele tuturor Iunctiilor proprii clasei respective;
c) atat adresele Iunctiilor virtuale proprii clasei respective, cat si a Iunctiilor virtuale
mostenite;
d) adresele Iunctiilor proprii clasei respective, cat si a celor mostenite;

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