Sunteți pe pagina 1din 60

Anul I Informatic (valabil i pentru Anul II Matematic-Informatic) iunie 2005 Proiectare i programare orientate pe obiecte Examen scris I.

Spunei de cte ori se execut fiecare constructor n programul de mai jos i n ce ordine.
#include <iostream.h> class cls1 { protected: int x; public: cls1(){ x=13; } }; class cls2: public cls1 { int y; public: cls2(){ y=15; } int f(cls2 ob) { return (ob.x+ob.y); } int main() { cls2 ob; cout<<ob.f(ob); return 0; }

};

II.

Descriei pe scurt diferena dintre funciile care returneaz valoare i cele care returneaz referin.

III.

Spunei dac programul de mai jos este corect. n caz afirmativ, spunei ce afieaz, altfel, spunei de ce nu este corect.
#include <iostream.h> class cls1 { int x; public: cls1(){ x=13; } int g(){ static int i; i++; return (i+x); } }; class cls2 { int x; public: cls2(){ x=27; } cls1& f(){ static cls1 ob; return ob; } }; int main() { cls2 ob; cout<<ob.f().g(); return 0; }

IV.

Spunei dac programul de mai jos este corect. n caz afirmativ, spunei ce afieaz, altfel, spunei de ce nu este corect.
#include <iostream.h> class cls1 { protected: int x; public: cls1(int i=10) { x=i; } int get_x() { return x;} }; class cls2: cls1 { public: cls2(int i):cls1(i) {} }; int main() { cls d(37); cout<<d.get_x(); return 0; }

V.

Descriei pe scurt cum se pot defini funcii de conversie ntre tipuri (clase).

VI.

Cum trebuie definit variabila n din clasa de mai jos, dac dorim ca ea s contorizeze numrul tuturor obiectelor care aparin clasei cls la un moment dat.
class cls { int n; public: cls() { n ++; } ~cls(){ n --; }

};

VII.

Spunei dac programul de mai jos este corect. n caz afirmativ, spunei ce afieaz, altfel, spunei de ce nu este corect.
#include <iostream.h> class cls { int x; public: cls(int y) {x=y; } int operator*(cls a,cls b){return (a.x*b.x); } }; int main() { cls m(100),n(15); cout<<m*n; return 0; }

VIII.

Spunei care este diferena dintre clasa generic (template) i clasa abstract i ]n ce situaii se folosete fiecare dintre ele.

IX.

Fiind date urmtoarele tipuri de clase:


class B { /* instructiuni */ }; class D1: virtual B { /* instructiuni */ }; class D2: virtual B { /* instructiuni */ }; class D3: B { /* instructiuni */ }; class D4: private B { /* instructiuni */ }; class D5: virtual public B { /* instructiuni */ }; class M1: D1, public D2, D3, private D4, virtual D5 { /* instructiuni */ }; class M2: D1, D2, virtual D3, virtual D4, virtual D5 { /* instructiuni */ };

spunei de cte ori este motenit clasa B n clasa M1. Dar n clasa M2 ? Justificai.

X.

Spunei care dintre declaraiile funciei main() sunt corecte n programul de mai jos. Justificai.
#include <iostream.h> class B1 { public: int x; }; class B2 { int y; }; class B3 { public: int z; }; class B4 { public: int t; }; class D: private B1, protected B2, public B3, B4 { int u; }; int main() { D d; cout<<d.u; cout<<d.x; cout<<d.y; cout<<d.z; cout<<d.t; return 0; }

XI.

Descriei pe scurt diferena dintre transferul prin valoare i transferul prin referin al parametrilor n cazul apelului unei funcii.

XII.

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 vi; public: cls(int v=37) { vi=v; } friend int& f(cls); }; int& f(cls c) { return c.vi; } int main() { const cls d(15); f(d)=8; cout<<f(d); return 0; }

XIII.

Spunei dac programul de mai jos este corect. n caz afirmativ, spunei ce afieaz, altfel, spunei de ce nu este corect.
#include <iostream.h> class cls1 { public: int x; cls1(int i=20) { x=i; } }; class cls2 { public: int y; cls2(int i=30) { y=i; } operator cls1() { cls1 ob; ob.x=y; return ob; } }; cls1 f(cls1 ob) { ob.x++; return ob; } int main() { cls1 ob1; f(ob1); cout<<ob1.x; cls2 ob2; f(ob2); cout<<ob2.y; return 0; }

XIV. Spunei pe scurt prin ce se caracterizeaz o metod static a unei clase.

XV.

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

XVI. Spunei de cte ori se apeleaz destructorul clasei cls n programul de mai jos. Justificai.
#include<iostream.h> class cls { public: int x; cls(int i=0) { x=i; } }; cls f(cls c) { c.x++; return c; } int main() { cls r(10); cls s=f(r); return 0; }

XVII. Spunei care este diferena dintre incluziunea de clase i motenirea de clase i cnd se folosete fiecare metod.

XVIII. 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> tip dif(tip x, tip y) { return x-y; } unsigned dif(unsigned x, unsigned y) { return x>=y?x-y:y-x; } int main() { unsigned i=7,j=8; cout<<dif(i,j); return 0; }

Anul I Informatic Proiectare i programare orientate pe obiecte Examen scris I.

iunie 2006

Spunei dac programul de mai jos este corect. n caz afirmativ, precizai exact constructorii care se execut i n ce ordine. n caz negativ spunei de ce nu este corect.
#include<iostream.h> class cls1 { public: int x; cls1(int i=13) { x=i; } }; class cls2: virtual public cls1 { public: cls2(int i=15) { x=i; } }; class cls3: virtual public cls1 { public: cls3(int i=17) { x=i; } }; class cls4: public cls1 { public: cls4(int i=19) { x=i; } }; class cls5: public cls2, public cls3, public cls4 { public: int y; cls5(int i,int j):cls4(i),cls2(j){ y=i+j; } cls5(cls5& ob) ){ y=-ob.y; }}; int main() { cls5 ob1(-9,3), ob2=ob1; cout<<ob2.y; return 0; }

II.

Descriei pe scurt constructorul de copiere i situaiile n care acesta este folosit..

III.

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; const int y; public: cls(int i, int j):x(i), y(j) { } int imp(int, int) const; }; int imp(int i, int j) const { x=i; y=j; return x+y; } int main() { cls ob(5); cout<<ob.imp(-9,8); return 0; }

IV.

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 B { int a; public: B(int i=0) { a=i; } int get_a(){ return a; } }; class D: private B { public: D(int x=0): B(x) {} int get_a() { return B::get_a(); } }; int main() { D d(-89); cout<<d.get_a(); return 0; }

V.

Descriei pe scurt ce reprezint obiectul implicit al unei funcii.

VI.

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 B { protected: int x; B(int i=10) { x=i; } public: virtual B operator+(B ob) { B y(x+ob.x); return y;} }; class D: public B { public: D(int i=10) { x=i; } void operator=(B p) { x=p.x; } B operator+(B ob) { B y(x+ob.x+1); return y; } void afisare(){ cout<<x; } }; int main() { D p1(-59),p2(32),*p3=new D; *p3=p1+p2; p3->afisare(); return 0; }

VII.

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 { public: int sa; cls(int s=0) { sa=s; } operator int() { return sa; } int f(int c) { return (sa*(1+c/100)); } }; int main() { cls p(37); cout<<p.f(p); return 0; }

VIII.

Descriei diferena dintre un pointer i o referin.

IX.

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 B { public: int x; B(int i=0) { x=i; } virtual B aduna(B ob) { return(x+ob.x); } B minus() { return(1-x); } void afisare(){ cout<<x; } }; class D: public B { public: D(int i=0) { x=i; } B aduna(B ob) { return(x+ob.x+1); } }; int main() { B *p1, *p2; p1=new D(138); p2=new B(-37); *p2=p2->aduna(*p1); *p1=p2->minus(); p1->afisare(); return 0; }

X.

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; }

XI.

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.

XII.

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; }

XIII.

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; }

XIV.

Descriei pe scurt metoda de identificare a tipului n timpul rulrii (RTTI).

XV.

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; }

XVI. 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(); }

XVII.

Spunei dac o variabil constant poate fi transmis ca parametru al unei funcii i dac da, n ce situaii. Justificai.

XVIII. 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; }

Anul II Matematic-Informatic Proiectare i programare orientate pe obiecte Test scris (verificare) I.

ianuarie 2007

Spunei de cte ori se apeleaz fiecare constructor n programul de mai jos i n ce ordine.
class cls1 { protected: int x; public: cls1(){ x=13; } }; class cls2: public cls1 { protected: int y; public: cls2(){ y=15; } }; class cls3: public cls2 { protected: int z; public: cls3(){ z=17; } int f(cls3 ob){ return ob.x+ob.y+ob.z; } int main() { cls3 ob; ob.f(ob); return 0; }

};

II.

Spunei ce reprezint o funcie virtual i n ce condiii o funcie virtual definete o clas abstract.

III.

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() { x=23; } int get_x(){ return x; } }; int main() { cls *p1, *p2; p1=new cls; p2=(cls*)malloc(sizeof(cls)); int x=p1->get_x()+p2->get_x(); cout<<x; return 0; }

IV.

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 B { int a; B(int i=0) { a=i; } int get_a(){ return a; } }; class D: protected B { public: D(int x=0): B(x) {} int get_a() { return B::get_a(); } }; int main() { D d(-89); cout<<d.get_a(); return 0; }

V.

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

VI.

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 a; cls1() { a=7; } }; class cls2 { public: int b; cls2(int i) { b=i; } cls2(cls1& x) { b=x.a; } }; int main() { cls1 x; cout<<x.a; cls2 y(x); cout<<y.b; return 0; }

VII.

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 { public: int sa; cls(int s=0) { sa=s; } operator float() { return sa; } }; int f(float c) { return (c*(1+c/100)); } int main() { cls p(35); cout<<f(p); return 0; }

VIII.

Spunei ce reprezint o funcie prieten (friend) a unei clase.

IX.

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 B { protected: int x; public: B() { x=78; } }; class D1: virtual public B { public: D1() { x=15; } }; class D2: virtual public B { public: D2() { x=37; } }; class C: public D2, public D1 { public: int get_x() { return x; } }; int main() { C ob; cout<<ob.get_x(); return 0; }

X.

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 a) { return z-a.z; } int operator>=(cls a) { return z>=a.z; } }; template <class tip> tip dif(tip x, tip y) { return x-y; } int dif(cls<int> x, cls<float> y) { return x>=y?x-y:y-x; } int main() { cls<int> i=3; cls<float> j=4; cout<<dif(i,j); return 0; }

XI.

Spunei dac o variabil constant poate fi transmis ca parametru al unei funcii i dac da, n ce situaii. Justificai.

XII.

Spunei de cte ori se apeleaz destructorul clasei cls n programul de mai jos. Justificai.
class cls { int x; public: cls(int i=0) { x=i; } cls(cls& ob) { x=ob.x; } }; cls& f(cls &c) { return c; } main() { cls r; cls s=r; f(f(f(s))); }

XIII.

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 B { int x; public: B(int i=0) { x=i; } }; class D: public B { public: D():B(15) {} int f() { return x; } }; int main() { D d; cout<<d.f(); return 0; }

XIV.

Descriei pe scurt ce reprezint obiectul implicit al unei metode.

XV.

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; }

XVI. 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 { return x++; } }; void main() { const cls d(-15); cout<<d.f(); }

XVII.

Descriei pe scurt ce reguli verific suprancrcarea operatorilor.

XVIII. 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(int y) { try { if (y%2) throw y/2; } catch (int i) { if (i%2) throw; cout<<Numarul <<i<< nu e bun!<<endl; } return y/2; } int main() { int x; try { cout<<Da-mi un numar intreg: ; cin>>x; if (x) f(x); cout<<Numarul <<x<< nu e bun!<<endl; } catch (int i) { cout<<Numarul <<i<< e bun!<<endl; } return 0; }

An I Informatic Proiectare i programare orientate pe obiecte Examen scris I.

iunie 2008

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 B { int x; public: B(int i=2):x(i){} int get_x() const { return x; } }; class D: public B { int *y; public: D(int i=2):B(i){ y=new int[i]; for(int j=0; j<i; j++) y[j]=1; } D(D& a){ y=new int[a.get_x()]; for(int i=0;i<a.get_x();i++) y[i]=a[i]; } int& operator[](int i) { return y[i]; } }; ostream& operator<<(ostream& o, const D& a) { for(int i=0;i<a.get_x();i++) o<<a[i]; return o; } int main() { D ob(5); cout<<ob; return 0; }

II.

Descriei trei metode de proiectare diferite prin care elementele unei clase se pot regsi n dublu exemplar, sub diverse forme, n definiia altei clase.

III.

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 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; }

IV.

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 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; }

V.

Spunei ce este obiectul implicit al unei metode i descriei pe scurt proprietile pe care le cunoatei despre acesta.

VI.

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]; for (int j=1; j<nr; j++) v[j]=0; } int size() { return nr; } int& operator[](int i) { return *(v+i); } }; int main() { cls x(10); x[4]=-15; for (int i=0; i<x.size(); i++) cout<<x[i]; return 0; }

VII.

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=-20) { x=i; } const int& f(){ return x; } }; int main() { cls a(14); int b=a.f()++; cout<<b; return 0; }

VIII.

Descriei pe scurt motenirea virtual i scopul n care este folosit.

IX.

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 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; }

X.

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 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; }

XI.

Enumerai 3 metode de implementare a polimorfismului de compilare.

XII.

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=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; }

XIII.

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=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; }

XIV. Descriei pe scurt mecanismul de tratare a excep iilor.

XV.

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 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; }

XVI. 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) { 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; }

XVII.

Descriei pe scurt diferena dintre un pointer i o referin.

XVIII. 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 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; }

Anul I Informatic (valabil i pentru Anul II Matematic-Informatic) iunie 2005 Proiectare i programare orientate pe obiecte Examen scris I. Spunei de cte ori se execut fiecare constructor n programul de mai jos i n ce ordine.
#include <iostream.h> class cls1 { protected: int x; public: cls1(){ x=13; } }; class cls2: public cls1 { int y; public: cls2(){ y=15; } int f(cls2 ob) { return (ob.x+ob.y); } int main() { cls2 ob; cout<<ob.f(ob); return 0; }

};

II.

Descriei pe scurt diferena dintre funciile care returneaz valoare i cele care returneaz referin.

III.

Spunei dac programul de mai jos este corect. n caz afirmativ, spunei ce afieaz, altfel, spunei de ce nu este corect.
#include <iostream.h> class cls1 { int x; public: cls1(){ x=13; } int g(){ static int i; i++; return (i+x); } }; class cls2 { int x; public: cls2(){ x=27; } cls1& f(){ static cls1 ob; return ob; } }; int main() { cls2 ob; cout<<ob.f().g(); return 0; }

IV.

Spunei dac programul de mai jos este corect. n caz afirmativ, spunei ce afieaz, altfel, spunei de ce nu este corect.
#include <iostream.h> class cls1 { protected: int x; public: cls1(int i=10) { x=i; } int get_x() { return x;} }; class cls2: cls1 { public: cls2(int i):cls1(i) {} }; int main() { cls d(37); cout<<d.get_x(); return 0; }

V.

Descriei pe scurt cum se pot defini funcii de conversie ntre tipuri (clase).

VI.

Cum trebuie definit variabila n din clasa de mai jos, dac dorim ca ea s contorizeze numrul tuturor obiectelor care aparin clasei cls la un moment dat.
class cls { int n; public: cls() { n ++; } ~cls(){ n --; }

};

VII.

Spunei dac programul de mai jos este corect. n caz afirmativ, spunei ce afieaz, altfel, spunei de ce nu este corect.
#include <iostream.h> class cls { int x; public: cls(int y) {x=y; } int operator*(cls a,cls b){return (a.x*b.x); } }; int main() { cls m(100),n(15); cout<<m*n; return 0; }

VIII.

Spunei care este diferena dintre clasa generic (template) i clasa abstract i ]n ce situaii se folosete fiecare dintre ele.

IX.

Fiind date urmtoarele tipuri de clase:


class B { /* instructiuni */ }; class D1: virtual B { /* instructiuni */ }; class D2: virtual B { /* instructiuni */ }; class D3: B { /* instructiuni */ }; class D4: private B { /* instructiuni */ }; class D5: virtual public B { /* instructiuni */ }; class M1: D1, public D2, D3, private D4, virtual D5 { /* instructiuni */ }; class M2: D1, D2, virtual D3, virtual D4, virtual D5 { /* instructiuni */ };

spunei de cte ori este motenit clasa B n clasa M1. Dar n clasa M2 ? Justificai.

X.

Spunei care dintre declaraiile funciei main() sunt corecte n programul de mai jos. Justificai.
#include <iostream.h> class B1 { public: int x; }; class B2 { int y; }; class B3 { public: int z; }; class B4 { public: int t; }; class D: private B1, protected B2, public B3, B4 { int u; }; int main() { D d; cout<<d.u; cout<<d.x; cout<<d.y; cout<<d.z; cout<<d.t; return 0; }

XI.

Descriei pe scurt diferena dintre transferul prin valoare i transferul prin referin al parametrilor n cazul apelului unei funcii.

XII.

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 vi; public: cls(int v=37) { vi=v; } friend int& f(cls); }; int& f(cls c) { return c.vi; } int main() { const cls d(15); f(d)=8; cout<<f(d); return 0; }

XIII.

Spunei dac programul de mai jos este corect. n caz afirmativ, spunei ce afieaz, altfel, spunei de ce nu este corect.
#include <iostream.h> class cls1 { public: int x; cls1(int i=20) { x=i; } }; class cls2 { public: int y; cls2(int i=30) { y=i; } operator cls1() { cls1 ob; ob.x=y; return ob; } }; cls1 f(cls1 ob) { ob.x++; return ob; } int main() { cls1 ob1; f(ob1); cout<<ob1.x; cls2 ob2; f(ob2); cout<<ob2.y; return 0; }

XIV. Spunei pe scurt prin ce se caracterizeaz o metod static a unei clase.

XV.

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

XVI. Spunei de cte ori se apeleaz destructorul clasei cls n programul de mai jos. Justificai.
#include<iostream.h> class cls { public: int x; cls(int i=0) { x=i; } }; cls f(cls c) { c.x++; return c; } int main() { cls r(10); cls s=f(r); return 0; }

XVII. Spunei care este diferena dintre incluziunea de clase i motenirea de clase i cnd se folosete fiecare metod.

XVIII. 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> tip dif(tip x, tip y) { return x-y; } unsigned dif(unsigned x, unsigned y) { return x>=y?x-y:y-x; } int main() { unsigned i=7,j=8; cout<<dif(i,j); return 0; }

Grupa 153 Proiectare gi programare orientate pe obiecte Examen scris

29 mai 2009

I.

Spunefi dacH programul de mai jos este corect. in caz afirmativ, spuneti ce afigeazg, in caz negativ spunefi de ce nu este corect.
#include<iostream.h> class A I protected: int x; public: A(int i) :x(i){ } int get-x() { return x; 1 1; class B: public A I public: B(int i) :A(i) { } B operatort(const B& b) {retcrn x+b.x; int main ( ) { B a ( 2 3 ) , b (-15) ; cout<<a+b; return 0;

1;

11.

Descriefi pe scurt cum este implementat mecanismul de control a1 tipului in timpul execufiei - RTTI.

111.

Spuneti dacH prograrnul de mai jos este corect. in caz afirmativ, spunefi ce afiyeaza, in caz negativ spunefi de ce nu este corect.
#include<iostream.h> class A I int x; public: A(int i=25) { x=i; 1 friend int& f(const A&); 1; int& f (const A& c) { return c.x; 1 int main ( ) I A a(15); cout<<f (a); return 0;

IV.

Spuneti dacii programul de rnai jos este corect. in caz afirmativ, spuneti ce afigeazii, in caz negativ spuneti de ce nu este corect.
#include<iostream.h> class A I int *v,dim; public: A(int i)

dim=i; v=new int[i]; for(int j=l; j < j++) ~ v[j]=j; } int size() { return dim; 1 friend int& operator [I (A, int) }; int& operator [](A a, int i) { return * (a.v+a.size ()-i) ; } int main ( ) I A a(10); a[3]=7; for (int i=O; i<a.size(); i+t) cout<<a[i]; return 0; 1
{

V.

Descriefi pe scurt diferenta dintre o clasii gi un obiect.

VI.

Spuneti dace programul de rnai jos este corect. in caz afirmativ, spuneri ce afigeazi, in caz negativ spuneti de ce nu este corect.
#include<iostream.h> class A I int x; public: A(int i) :x(i) { } int get-x ( ) const { return x; } } ; class B: public A I int *y; public: B (int i) :A(i){ y=new int [i]; for(int j=0; j<i; j + + ) y[j]=l; B (B&); int& operator [](int i) { return y [i]; } 1; B::B(B& a) I y=new int [a.get-x ( ) 1 ; for (int i=0;i<a.get-x ( ) ;i++) y [i]=a [i]; 1 ostream& operator<<(ostream& 0, B a) i++) o<<a [il ; { for (int i=0;i<a.get-x ( ) ; return o;

1
int main ( ) I B b(5); cout<<b; return 0; 1

VII.

Spunefi dace programul de mai jos este corect. in caz afirmativ, spunefi ce afi~eazii, in caz negativ spunefi de ce nu este corect.
#include<iostream.h> class A { static int x; public: A(int i=l) { x=i; 1 int f(A a) { return x+a.x; 1 static int g() { return f (2) /2; int A::x=7; int main ( ) 1 cout<<A: : g ( ) ; return 0; 1

};

VIII. Descriefi pe scurt crearea dinamice de obiecte.

Spuneii dace programul de rnai jos este corect. in caz afirmativ, spunefi ce afigeazl_in car negativ spunefi de ce nu este corect.
#include<iostream.h> class A { protected: int x; public: A(int i=12) { int get-x() { class B: public A I public: B(int i):A(i) B (const A& a) int main ( ) I A a(9); B b(a1; cout<<b.get-x(); return 0;

x=i; 1 return x;

{I
{return a

X.

Spuneli dace programul de mai jos este corect. in caz afirmativ, spuneli ce afigeaze, in caz negativ spuneti de ce nu este corect.
#include<iostream.h> class A I protected: int x; public: A(int i=-16) { x=i; 1 virtual A f(A a) { return x+a.x; } void afisare(){ cout<<x; } 1; class B: public A I public: B(int i=3):A(i) i } B f (B b) { return xtb.x+l; } 1; int main ( ) { A *pl=new B, *p2=new A, +p3=new A(p1->f(*p2)); p3->af isare ( ) ; return 0; 1

XI.

Descrieti pe scurt proprietgtile unui cimp static a1 unei clase.

XII.

Spuneji dace programul de mai jos este corect. in caz afirmativ, spunefi ce afi~eazi, in caz negativ spunefi de ce nu este corect.
#include<iostream.h> class A { public: int x; A(int i=O) { x=i; } A operator; cons^ A& a) { return A(x+a. x) ; ostream& operator<<(ostrean& o, A a) { o<<a.x; return o; template <class T> class B I T y; public: B() I } B(T i) { y=i; 1 B operator+ (B ob) { return B (ob.y+l); } void afisare(){ cout<<y; I I ; int main ( ) I B<int> bl(-15); B<A> b2(1); (bltb2).afisare ( ) ; return 0;

} )

};

Cc

XIII.

Spuneti dacil prograrnul de mai jos este corect. in caz afirmativ, spuneti ce afiqeaza, in caz negativ spunefi de ce nu este corect.
#include<iostream.h> class A { public: int x; A(int i=13) { x=i; 1 1; class B: virtual public A { public: B(int i=15) { x=i; 1 1; class C: virtual public A { public: C(int i=17) { x=i; 1 1; class D: public A { public: D(int i=19) { x=i; 1 1; class E: public B, public C, public D { public: int y; E(int i,int j) :D(i),B(j) y=x+i+j; 1 E(E& e) { y=-e.y; 11; int main ( ) { E el (-9,3), e2=el; cout<<e2.y; return 0;

XIV. Descrieti pe scurt funciiile $ablon $i dati exemplu de 3 situatii in care un ape1 de funciie NU genereazil o versiune a functiei dintr-un l~ablon disponibil pentru functia respectivil.

XV.

Spuneti daca programul de mai jos este corect. in caz afirmativ, spuneti ce afigeazii, in caz negativ spuneti de ce nu este corect.
#include<iostream.h> class A I const int x, y; public: A(int i, int j ) :x(i), ~ ( j ) int f ( ) { return xty; 1 1; int main ( ) I const A a(5,6); cout<<a. f ( ) ; return 0;

XVI. Spuneti dacZI programul de mai jos este corect. in caz afirmativ, spuneti ce afiqeazii, in caz negativ spunefi de ce nu este corect.
#include<iostream.h> class A I public: int x; A(int i=O) { x=i; 1 virtual A minus ( ) I return (1-x); 1 1 ; class B: public A I public: B(int i=O) { x=i; 1 void afisare() { cout<<x; } } ; int main ( ) I A *pl=new B (27); *pl=pl->minus( ) ; pl->afisare ( ) ; return 0;

XVII. -Descriefipe scurt diferenfa dintre polimorfismul de compilare 9i cel de executie.

XVIII. Spuneti dacl programul de mai jos este corect. in caz afirmativ, spuneti ce afiqeazii pentru o ~aloare intreagi citit5 egal5 cu 23,in caz negativ spuneti de ce nu este corect.
$include <iostream.h> int f (int y) I if (y%2) throw yt2.5; return y / 2 ;

1
int main ( 1 { int x; try

I
cout<<''Da-mi un numar: "; cin>>x; if (x%3) x=f (x); else throw x; cout<<"Nurnarul "<<x<<" e bun!"<<endl;

1
catch (int i) { cout<<"Numarul "<<i<<" nu e bun!"<<endl;

1
return 0;

Mai 2009 1. class A { public: int x; A(int i = 0) {x = i;} virtual A minus() {cout << x;}}; class B : public A { public: B (int i = 0) {x = i;} void afisare(){cout << x;}}; int main() { A *p1 = new A(18); *p1 = p1 -> minus(); dynamic_cast<B*>(p1) -> afisare(); return 0;} 2. Crearea dinamica de obiecte

Grupa 151

3. class A { int x; public: A(int i = 2) : x(i){} int get_x() const{return x;}}; class B : public A { int *y; public: B(int i = 2) : A(i) { y = new int[i]; for(int j = 0; j < i; j++) y[j] = 1; } B (B& b) { y = new int[b.get_x()]; for(int i = 0; i < b.get_x(); i++) {y[i] = b[i];} } int& operator [] (int i) const { return y[i]; } }; ostream& operator << (ostream& o, const B b) { for (int i = 0; i < b.get_x(); i++) o << b[i]; return o; }

int main() { const B b(5); cout << b; return 0;} 4. class A { protected: int x; public: A (int i) : x(i){} int get_x() {return x;} }; class B : public A { public: B(int i) : A(i){} operator int () {return x;} B operator + (const B& b) {return x + b.x + 1;} }; int main() { B a(2), b(-12); cout << (a + b) + a; return 0; } 5. Proprietatile campurilor statice 6. class A { int x; public: A(int i = 25) {x = i;} int& f() const {return x;} }; int main() { A a(15); cout << a.f(); return 0; } 7. class A { int x; const int y; public: A(int i, int j) : x(i), y(j){}

int f(int, int) const; }; int A :: f(int i, int j) const{return x ++;} int main() { A ob(5, -8); cout << ob.f(-9, 8); return 0; } 8. Proprietatile destructorului 9. class A { int x; public: A(int i) : x(i){} int get_x() const {return x;} }; class B : public A { int* y; public: B(int i) : A(i) { y = new int[i]; for (int j = 0; j < i; j++) y[j] = 1; } B(B&); int& operator[] (int i) {return y[i];} }; B :: B(B& a) { y = new int[a.get_x()]; for(int i = 0; i < a.get_x(); i++) { y[i] = a[i]; } } ostream& operator << (ostream& o, B a) { for(int i = 0; i < a.get_x(); i++) o << a[i]; } int main() { B b(5);

cout << b; return 0; } 10. class A { int i; public: A(){i = 1;} int get_i(){return i;} }; class B : public A { int j; public: B(){j = 2;} int get_j(){return j;} }; int main() { A *p; int x = 0; if(x) p = new A; else p = new B; if(typeid(p).name() == "B") cout << ((B*)p) -> get_j(); else cout << "tipuri diferite"; return 0; } 11. Descrieti pe scurt diferenta dintre parametrii transmisi prin pointeri si cei prin referinta. 12. class A { int x; public: A(int i = 17){x = i;} }; class B { int x; public: B(int i = -16){x = i;} operator A () {return x;} int get_x() {return x;} }; int main() { A a;

B b = a; cout << b.get_x(); return 0; } 13. class A { protected: int x; public: A(int i = -16){x = i;} virtual A f(A a){return x + a.x;} void afisare() {cout << x;} }; class B : public A { public: B(int i = 3) : A(i){} A f(A a) {return x + a.x + 1;} }; int main() { A *p1 = new B, *p2 = new A, *p3 = new A (p1 -> f(*p2)); p3 -> afisare(); return 0; } 14. Ce repezinta o functie virtuala si in ce conditii o functie virtuala defineste o clasa abstracta. 15. class A { public: int x; A(int i = 0) {x = i;} A operator + (const A& a) { return A(x + a.x); } }; ostream& operator << (ostream& o, A a) { o << a.x; return o; } template <class T> class B { T y; public: B(){} B(T i) { y = i; } B operator + (B ob) {return B(ob.y + 1);}

void afisare(){cout << y;} }; int main() { B<int> b1(-15); B<A> b2(1); (b1 + b2).afisare(); return 0; } 16. template <class T> T f(T x, T y) { return x + y; } int f(int x, int y) { return x - y; } int main() { int* a = new int(5), *b = new int(8); cout << f(a, b); return 0; } 17. RTTI 18. class A { int x; public: A(int i = 7){x = i;} int get_x(){return x;} operator int () {return x;} }; class B : public A { public: B(int i = -12) : A(i){} B operator + (B a) {return get_x() + a.get_x();} int main() { B a; int b = -21; b += a; cout << b; return 0; }

};

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