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;