subiecte pentru licenta ppoo vara 2011 (1)

23
Subiecte pentru licenta PPOO vara 2011 1 Analizati cu atentie urmatorul fragment de cod sursa. Precizati ce catitate de memorie se aloca pentru clasele care urmeaza? class Empty { typedef int Int; }; class EmptyToo : public Empty {}; class EmptyThree : public EmptyToo {}; int main() { std::cout << sizeof(Empty)<<” ” << sizeof(EmptyToo)<<” ” << sizeof(EmptyThree)<<endl; return 0; } Answer : a . 1 1 1 2 Analizati cu atentie urmatorul fragment de cod sursa. Deduceti ce calcul efectueaza sablonul urmator si se va afisa pe ecran? template <int N, int LO=1, int HI=N> class Calcul { public: enum { mid = (LO+HI+1)/2 }; enum { result = (N<mid*mid) ? Calcul<N,LO,mid-1>::result : Calcul<N,mid,HI>::result }; }; //pentru cazul cand LO == HI template<int N, int M> class Calcul<N,M,M> { public: enum { result = M };

Upload: xde13

Post on 05-Jul-2015

51 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Subiecte Pentru Licenta PPOO Vara 2011 (1)

Subiecte pentru licenta PPOO vara 2011

1 Analizati cu atentie urmatorul fragment de cod sursa. Precizati ce catitate de memorie se aloca  pentru clasele care urmeaza?

class Empty {    typedef int Int;  };

class EmptyToo : public Empty {};

class EmptyThree : public EmptyToo {};

int main(){    std::cout<< sizeof(Empty)<<” ”<< sizeof(EmptyToo)<<” ”<< sizeof(EmptyThree)<<endl;

      return 0;}Answer :

 a.  1 1 1

2 Analizati cu atentie urmatorul fragment de cod sursa. Deduceti ce calcul efectueaza sablonul urmator si  se va afisa pe ecran?

template <int N, int LO=1, int HI=N>class Calcul {  public:        enum { mid = (LO+HI+1)/2 };         enum { result = (N<mid*mid) ? Calcul<N,LO,mid-1>::result                                : Calcul<N,mid,HI>::result };};

//pentru cazul cand LO == HI template<int N, int M>class Calcul<N,M,M> {  public:    enum { result = M };};

int main(int argc, char* argv[]){int x = Calcul<10>::result;      cout << x<< endl;      return 0;    }

Answer:  b.  53 Analizati cu atentie urmatorul fragment de cod sursa. Deduceti ce calcul efectueaza

sablonul urmator si  se va afisa pe ecran?

Page 2: Subiecte Pentru Licenta PPOO Vara 2011 (1)

template<intN, intLO=1, intHI=N>classCalcul {  public:        enum{ mid = (LO+HI+1)/2 };         enum{ result = (N<mid*mid) ? Calcul<N,LO,mid-1>::result                                : Calcul<N,mid,HI>::result };};

//pentru cazul cand LO == HI template<intN, intM>classCalcul<N,M,M>{  public:    enum{ result = M };};

intmain(intargc, char* argv[]){int x = Calcul<10>::result;

      cout <<x<<endl;      return0;    } a) 1b) 2C) 3d) 4e) 5Answer  c.   3

4 Analizati cu atentie urmatorul fragment de cod sursa. Se doreste introducerea in definitia sablonului de clasa Vector a unui operator de extractie care sa permita o extracie inlantuita, precizati care este declaratia corecta  ?

template<typename T=int, int dim=100>class Vector{      T v[dim];public:      Vector(){ memset(v,0,sizeof(v)); }      ~Vector(){}      T &operator[](int i){ return v[i];}                  //alegeti declaratia operatorului de insertie in flux      };

 b.  template<typename T, int dim> friend istream & operator>>(istream &, Vector<T,dim>&);

d.  friend void operator>>(istream &, Vector<T,dim>&);

5 Analizati cu atentie urmatorul fragment de cod sursa. Precizati care este efectul apelarii metodei Create(), ce varianta a functiei se va apela si ce se afiseaza pe ecran?

class A{protected:      int dim;public:      A(){  cout<<"A::A()"<<endl;}

Page 3: Subiecte Pentru Licenta PPOO Vara 2011 (1)

      virtual ~A(){ cout<<"A::~A()"<<endl;}      void Create(int d = 0x10)      {            dim = d;            cout<<"A::Create("<<dim<<")"<<endl;      } };

class B: public A{public:      B(){ cout<<"B::B()"<<endl;}      virtual ~B(){ cout<<"B::~B()"<<endl;}

      virtual void Create(int d = 0x100)      {            dim = d;            cout<<"B::Create("<<dim<<")"<<endl;      }};

int main(int argc, char* argv[]){        A* p = new B();      p->Create( );            delete p;      return 0;}

 c.   A::Create(16)

6 Analizati cu atentie urmatorul fragment de cod sursa. Precizati care este efectul apelarii metodei Create(), ce varianta a functiei se va apela si ce se afiseaza pe ecran?class Baza2 {public:      Baza2(){       Create();      }       ~Baza2(){      Create();      }      void Build(){Create();      }

      virtual void Create(int d = 0x10)       {             cout<<"B::Create: d = "<< d << endl;      }};class Derivat2:public Baza2{public:      Derivat2(){  }

      virtual void Create(int d = 0x100)       {             cout<<"D::Create: d = "<< d << endl;      }};int main (int argc, char* argv[]){      Baza2 *p = new Derivat2();      p->Build();      delete p;      return 0;}

Answer  a.  B::Create: d = 16 D::Create: d = 16 B::Create: d = 16

Page 4: Subiecte Pentru Licenta PPOO Vara 2011 (1)

7 Analizati cu atentie urmatorul fragment de cod sursa. Precizati  care este ordinea de apel a   destructorilor. Ce se va afisa pe ecran?

class Clasa1{public:      ~Clasa1(){ cout<<"C1::~C1()"<<endl; }      };

class Clasa2{public:      ~Clasa2(){ cout<<"C2::~C2()"<<endl;} };

class  System{      Clasa1 ob1;      Clasa2 ob2;public:      System():ob2(),ob1(){ }            virtual ~System(){ cout<<"S::~S()"<<endl;}

};int main (int argc, char* argv[]){      System a;      return 0;}

 d.  S::~S()C2::~C2()C1::~C1()

8 Analizati cu atentie urmatorul fragment de cod sursa. Precizati  care este ordinea de apel a   destructorilor. Ce se va afisa pe ecran?class W{public:            virtual ~W(){ cout<<"W::~W()"<<endl;}};

class R{ public:            virtual ~R(){ cout<<"R::~R()"<<endl;}};class File: public W, public R{ public:            virtual ~File(){ cout<<"File::~File()"<<endl;}};int main (int argc, char* argv[]){

      R* f = new File();delete f;      return 0;}

Answer :

Page 5: Subiecte Pentru Licenta PPOO Vara 2011 (1)

a) R::~R() W::~W() File::~File()

b) File::~File() W::~W() R::~R()

C) File::~File() R::~R() W::~W()

d) File::~File() R::~R() R::~R()

e.  R::~R() NU

9 Analizati cu atentie urmatorul fragment de cod sursa. Precizati  care este ordinea de apel a   destructorilor. Ce se va afisa pe ecran?class W{public:            ~W(){ cout<<"W::~W()"<<endl;}};

class R{ public:            ~R(){ cout<<"R::~R()"<<endl;}};class File: public W, public R{ public:            ~File(){ cout<<"File::~File()"<<endl;}};int main (int argc, char* argv[]){

      R* f = new File();delete f;      return 0;}

Answer  a.  R::~R()

10 Analizati cu atentie codul urmator. Care este ordinea de apel a destructorilor?

class Shape{public:      Shape()      { cout<<"Shape::Shape"<<endl;}      virtual ~Shape(){ cout<<"Shape::~Shape"<<endl; }};class Point:public Shape{      int x,y;public:      Point(){ cout<<"Point::Point"<<endl;}

Page 6: Subiecte Pentru Licenta PPOO Vara 2011 (1)

      virtual ~Point(){ cout<<"Point::~Point"<<endl; }};class Circle:public Point {      int radius;public:      Circle(int r = 0)  { cout<<"Circle::Circle"<<endl;}      virtual ~Circle()  { cout<<"Circle::~Circle"<<endl;}};int main(){      Shape * v[10];      int n = 0;      v[n++] = new Circle();      v[n++] = new Point();

      for(int i = 0; i<n; i++)      delete v[i];      return 0;}

 b.  Circle::~CirclePoint::~PointShape::~ShapePoint::~PointShape::~Shape

 d.  DACircle::~CirclePoint::~PointShape::~ShapePoint::~PointShape::~Shape

CONSTRUCTORI11 Analizati cu atentie urmatorul fragment de cod sursa. Precizati  care este ordinea de

apel a   constructorilor. Ce se va afisa pe ecran?class Clasa1{public:      Clasa1(){  cout<<"C1::C1()"<<endl;}                  };class Clasa2{public:      Clasa2() { cout<<"C2::C2()"<<endl;}      };class  System{      Clasa2 ob1;      Clasa1 ob2;public:      System():ob2(), ob1()  { cout<<"S::S()"<<endl;}      };int main (int argc, char* argv[]){      System a;      return 0;}

 a.  C1::C1()

Page 7: Subiecte Pentru Licenta PPOO Vara 2011 (1)

C2::C2() ....- Ras incorect

S::S()12 Analizati cu atentie urmatorul fragment de cod sursa. Precizati  care este ordinea de

apel a   constructorilor. Ce se va afisa pe ecran?class Clasa1{public:      Clasa1(){  cout<<"C1::C1()"<<endl;}                  };class Clasa2{public:      Clasa2() { cout<<"C2::C2()"<<endl;}      };class  System{      Clasa1 ob1;      Clasa2 ob2;public:      System()  { cout<<"S::S()"<<endl;}      };int main (int argc, char* argv[]){      System a;      return 0;}

Answer : a) S::S() C1::C1() C2::C2()

b) S::S() C2::C2() C1::C1()c) S::S()

 d.  C1::C1()C2::C2()S::S() e ) C1::C1() C2::C2()

13 Analizati cu atentie urmatorul fragment de cod sursa. Precizati  care este ordinea de apel a constructorilor. Ce se va afisa pe ecran?classW{public:      W(){  cout<<"W::W()"<<endl;}      };

classR{public:      R(){  cout<<"R::R()"<<endl;}      };

Page 8: Subiecte Pentru Licenta PPOO Vara 2011 (1)

classFile: publicW, publicR{ public:      File(){ cout<<"File::File()"<<endl;}      };

intmain (intargc, char* argv[]){

      R* f = new File();      return0;}

Answer

14 Analizati cu atentie urmatorul fragment de cod sursa.Precizati care este ordinea de apel a constructorilor. Ce se va afisa pe ecran?

class Baza{public:Baza(){ cout<<"B::B()"<<endl;}Baza(Baza &b){ cout<<"B::B(B&)"<<endl;} ~Baza(){ cout<<"B::~B()"<<endl;}

};

int main (int argc, char* argv[]){Baza a;Baza b = a;Baza c(b);

return 0;} a)B::B(B&)B::B(B&)B::B(B&)

b)B::B()B::B(B&)B::B(B)

c)B::B()B::B(B)B::B(B&)

D) B::B() B::B(B&) B::B(B&)

e)B::B()B::B()B::B()

Pentru ca :Baza a; =B::B() Baza b = a; =B::B(B&)

Page 9: Subiecte Pentru Licenta PPOO Vara 2011 (1)

Baza c(b); =B::B(B&)

CONSTRUCTORI SI DESTRUCTORI15 Analizati cu atentie urmatorul fragment de cod sursa. Precizati  care este ordinea de

apel a constructorilor si destructorilor. Ce se va afisa pe ecran? ( BAZA, VIRTUAL)class Baza{public:      Baza(){  cout<<"B::B()"<<endl;}      virtual ~Baza(){ cout<<"B::~B()"<<endl;}

};class Derivat:public Baza{public:      Derivat(){ cout<<"D::D()"<<endl;}      ~Derivat(){ cout<<"D::~D()"<<endl;}};int main (int argc, char* argv[]){

      Baza *s = new Derivat();      delete s;      return 0;}

Answer :  e.  B::B()D::D()D::~D()B::B()

16 Analizati cu atentie urmatorul fragment de cod sursa. Precizati  care este ordinea de apel a constructorilor si destructorilor. Ce se va afisa pe ecran? ( BAZA , BAZA )class Baza{public:      Baza(){  cout<<"B::B()"<<endl;}      ~Baza(){ cout<<"B::~B()"<<endl;}

};class Derivat:public Baza{public:      Derivat(){ cout<<"D::D()"<<endl;}      ~Derivat(){ cout<<"D::~D()"<<endl;}};int main (int argc, char* argv[]){

      Baza *s = new Derivat();      delete s;      return 0;}

Answer  a. 

D::D()D::~D()

17 Analizati cu atentie urmatorul fragment de cod sursa. Alegeti observatia corecta si precizati  ce  se va afisa pe ecran?class Sir{      int  len;

Page 10: Subiecte Pentru Licenta PPOO Vara 2011 (1)

      char *p;public:      Sir(char * s = NULL)      {             p = NULL;            len = 0;            if(s)            {                  len = strlen(s);                  p = new char[len+1];                  strcpy_s(p, len+1, s);                        }                        }              ~Sir(){ if (p) delete[] p; }      void Print(){ cout << p << endl; }};

int main(int argc, _TCHAR* argv[]){      Sir  a("Programare in C++");            {            Sir  b("Proiectare orientata pe obiecte");            a = b;      }      a.Print();return 0;}a.  

Nu se poate spune ce se afiseaza, codul nu se compileaza - NUe.  Proiectare orientata pe obiecte, codul este corect si complet – NU

 e.  Programare in C++, codul este corect  dar incomplet - NU

18 Analizati cu atentie urmatorul fragment de cod sursa. Alegeti observatia corecta ?

class Sir{      int len;      char *p;public:      Sir(char * s=NULL)      {             p = NULL;            len =0;

            if(s)            {                  len = strlen(s);                  p = new char[len+1];                  strcpy_s(p,len+1, s);                                          }                        }      ~Sir(){ if (p) delete[] p; }            };

Page 11: Subiecte Pentru Licenta PPOO Vara 2011 (1)

int main(int argc, char* argv[]){

      while(true)      {            Sir * ps = new Sir("Programare in C++");            delete ps;      }      return 0;}Answer a.  codul este corect , se compileaza dar ruleaza la infinitb) codul este sintactic corect , se compileaza dar nu se executac) Nu se afiseaza nimic, codul nu se compileazad) Se compileaza si ruleaza pana cand se epuizeaza memoria, este eliminat de sisteme) Se compileaza dar nu se executa si afiseaza un mesaj de eroare

19 Analizati cu atentie urmatorul fragment de cod sursa. Precizati ce catitate de memorie se aloca  pentru  clasele care urmeaza pe o platforma pe 64biti?

class Empty {    typedef int Int;  // typedef members don't make a class nonemptypublic:      Empty(){}      ~Empty(){}};

class EmptyToo : public Empty {public:      EmptyToo(){}      virtual ~EmptyToo(){}};

class EmptyThree : public EmptyToo {public:      EmptyThree(){}      virtual ~EmptyThree(){}};

int main(){    std::cout<< sizeof(Empty)<<” ”<< sizeof(EmptyToo)<<” ”<< sizeof(EmptyThree)<<endl;

      return 0;}

 a.  4 4 4 ....- Ras incorect

20 Analizati cu atentie urmatorul fragment de cod sursa. Se doreste introducerea in definitia sablonului de clasa Vector a unui operator de extractie care sa permita o extracie inlantuita, precizati care este declaratia corecta  ?

template<typename T=int, int dim=100>class Vector

Page 12: Subiecte Pentru Licenta PPOO Vara 2011 (1)

{      T v[dim];public:      Vector(){ memset(v,0,sizeof(v)); }      ~Vector(){}      T &operator[](int i){ return v[i];}                  //alegeti declaratia operatorului de insertie in flux      };

 b.  template<typename T, int dim> friend istream & operator>>(istream &, Vector<T,dim>&);

21 Fie urmatoarea specificare de clasa:

class AbstractList{public:virtual void erase()=0;virtual void put(AbstractElem* ae){};virtual AbstractElem* get(){};virtual int isEmpty(){};virtual int isFull(){};};Care afirmatie este corecta:

a) AbstractList este o clasa concretaB)AbstractList este o clasa abstracta - Corectc) isEmpty() este metoda virtuala purad) obiectele clasei pot fi construite cu AbstractList();

 c.  AbstractList *pa=new AbstractList();

22 Care declarare este corecta: A) AbstractList *pa; -Corectc) AbstractList *pa=new AbstractList(); d) AbstractList *pa=&a;

23 Derivarea este:  b.  o metoda de a dezvolta interfete pe baza unor clase abstracte  c.     o metoda de a dezvolta clase concrete pe baza unor clase abstracte

d.  o metoda de a reutiliza codul sursa

24 Fie urmatoarea specificare de clase:class Complex;class Punct{public:   Punct(float x=0, float y=0):x(x),y(y){}   operator Complex();   operator float(){return x;}private:   float x,y;};class Complex{public:   Complex(float x=0, float y=0):x(x),y(y){}   operator Punct(){return Punct(x,y);}   operator float(){return x;}

Page 13: Subiecte Pentru Licenta PPOO Vara 2011 (1)

private:      float x,y;};

Metoda Complex:: operator float() este utilizata pentru

d.  Conversia unui obiect Complex in obiect Punct - Ras incorect  d.  Conversia obiectelor Complex in numere reale....?

25 1. Fie urmatoarea specificare de clasa:

class AbstractList{public:

      virtual void Create()=0;      virtual void put(AbstractElem* ae){};      virtual AbstractElem* get(){};      virtual int isEmpty(){};      virtual int isFull(){};};

Care afirmatie este corecta: a.   obiectele clasei nu pot fi construite folosind constructorul;

 b.  AbstractList este o clasa concreta  c. Obiectele se creaza cu metoda Create  a.  isEmpty() este metoda virtuala pura

26 . Fie urmatoarea specificare de clasa:    class AbstractList{public:

      virtual void erase()=0;      virtual void put(AbstractElem* ae)=0;      virtual AbstractElem* get()=0;      virtual int isEmpty()=0;      virtual int isFull()=0;};

Care declarare este corecta:d.  AbstractList *ap;

 c. AbstractList *pa=new AbstractList();

27 Fie programul:

class Persoana{public:      Persoana(char * n){nume=n;}      void afisare(){cout<<nume<<endl;}      char *nume;

};Constructorul Persoana(char *) poate fi utilizat pentru:

b.   Conversia sirurilor de caractere in obiecte Persoana  c.  Conversia obiectelor Persoana in siruri de caractere -

28 Fie urmatorul program:

Page 14: Subiecte Pentru Licenta PPOO Vara 2011 (1)

class A{public:      void m(){cout<<"A:m()"<<endl;};      virtual void v(){cout<<"A:v()"<<endl;};};class B: public A{private:      void m(){cout<<"B:m()"<<endl;};      virtual void v(){cout<<"B:v()"<<endl;};};void main(){      A a,*p;      B b;      b.m();            b.v();             p=&b; p->m(); p->v();

}Care expresie este corecta:

 c.  p->m();

29 Fie urmatorul program:

class A{public:      void m(){cout<<"A:m()"<<endl;};      virtual void v(){cout<<"A:v()"<<endl;};};class B: public A{private:      void m(){cout<<"B:m()"<<endl;};      virtual void v(){cout<<"B:v()"<<endl;};};

void main(){      A a,*p;      B b;      b.m();           b.v(); 

         p=&a; p->m(); p->v();       p=&b; p->m(); p->v();}Care expresie este incorecta:

a.  p=&b;   d.  p->v();   c .   b.v();

30 . Fie urmatorul program:

class A{public:            void s(){cout<<"void A::s()"<<endl;}

Page 15: Subiecte Pentru Licenta PPOO Vara 2011 (1)

      void s(int i){i++;cout<<"void A::s(int)"<<endl; }         virtual void v(){cout<<"virtual void A::v()"<<endl;}virtual void v(int i){i++;cout<<"virtual void A::v(int)"<<endl;}};Care afirmatie este corecta:  b.  Definitia void s(int i) este incorecta deoarece exista o definitie pentru metoda s.

d.   Definitia void s(int i )supraincarca definitia void s()

  c.  void s(int i) este metoda virtuala31 Fie urmatorul program:

class A{public:            void s(){cout<<"void A::s()"<<endl;}      void s(int i){i++;cout<<"void A::s(int)"<<endl; }         virtual void v(){cout<<"virtual void A::v()"<<endl;}virtual void v(int i){i++;cout<<"virtual void A::v(int)"<<endl;}};Care afirmatie este corecta:

 b.  Definitia virtual void v ()supraincarca definitia virtual void v(int i )  

d. Definitia virtual void v(int i) este incorecta deoarece exista o definitie pentru metoda v.

X c. void v() este metoda ce va fi legata static. X d. in expresia p->v(); metoda v este legata static

32 Fie urmatorul program class A{public:void s(){cout<<"void A::s()"<<endl;}void s(int i){i++;cout<<"void A::s(int)"<<endl; }virtual void v(){cout<<"virtual void A::v()"<<endl;}virtual void v(int i){i++;cout<<"virtual void A::v(int)"<<endl;}};Care afirmatie este corecta:A. Definitia virtual void v()supraincarca definitia virtual void v(int i)b. Definitia virtual void v(int i) este incorecta deoarece exista o definitie pentru metoda v.

33 Fie programul:

class Persoana{public:      Persoana(char * n){nume=n;}      void afisare(){cout<<nume<<endl;}      char *nume;

};Constructorul Persoana(char *) poate fi utilizat pentru:  a.  Construirea de siruri de caractere

c.  Conversia obiectelor Persoana in siruri de caractere – Ras incorect b.Conversia sirurilor de caractere in obiecte Persoana

34 Fie programul :

class Cerc{public:      Cerc(float r):raza(r){}      float getRaza(){return raza;}      void operator++(){raza++;} private:

Page 16: Subiecte Pentru Licenta PPOO Vara 2011 (1)

      float raza;};class Cilindru: public Cerc{public:      Cilindru(float raza, float inaltime):Cerc(raza), inaltime(inaltime){};      virtual void operator++(){inaltime++;}      float getInaltime(){return inaltime;}private:      float inaltime;};void main(){      Cerc *pc;      Cilindru c(1,5);       pc=&c;  ++ *pc;      cout<<pc->getRaza()<<" "<<c.getInaltime()<<endl;      getch();

}Programul afiseaza :Answer  c.  2   5

35 Fie programul:#include <iostream.h>class Cerc{public:      Cerc(float r):raza(r){}      float getRaza(){return raza;}      Cerc operator++(){raza++;return *this;}// return by value      Cerc operator--(){raza--;return *this;}// return by valueprivate:      float raza;};void main(){      Cerc c(1.0);      cout<<(++(++c)).getRaza()<<” ”;            cout<<c.getRaza()<<” ”;                    cout<<(--(--c)).getRaza()<<” ”;            cout<<c.getRaza()<<” ”;              }              Programul afiseaza :    3 2 0 1    

36 Fie programul :// Constructor cu semantica prin referinta// Operatorul = cu semantica prin valoare si stergere destinatie#include <iostream.h>class C{

public: C(int n=0, int v[]); C& C::operator=(C& x);friend ostream& operator<<(ostream &o, const C&);private: int dim; int *pi;};C::C(int n, int v[]) { dim=n; pi= v;}

Page 17: Subiecte Pentru Licenta PPOO Vara 2011 (1)

ostream& operator<<(ostream &o, const C &m){ for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" "; return o;}C& C::operator=(C& x){ // stergerea valorior din vectorul destinatie, care oricum vor fi modificate delete[] pi; // atribuire dim=x.dim; pi=new int[dim]; for(int j=0; j<dim; j++){pi[j]=x.pi[j];} return *this;}void main(){ int a[]={1,2,3}, b[]={10,20};C x(3,a),y(2, b); x=y ; b[0]=-1000; cout<< x <<endl; } Programul afiseaza: 10 25

37 Fie urmatorul program:

class C{public:      C(int n=0, int v[]);friend      ostream& operator<<(ostream &o, const C&);

private:      int dim;      int *pi;};

C::C(int n, int v[])      {      dim=n;      pi= v;      }

ostream& operator<<(ostream &o, const C &m){      for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" ";      return o;}

void main(){      int a[]={1,2,3}, b[]={10,20};      C x(3,a),y(2, b);      a[0]=-100;      cout<<(x=y)<<endl;      }Programul afiseaza:

  a.  -100 2 3 – Ras incorect

 b.  10 2038 Fie urmatorul program:

class C{public:      C(int n=0, int v[]);friend      ostream& operator<<(ostream &o, const C&);

Page 18: Subiecte Pentru Licenta PPOO Vara 2011 (1)

private:      int dim;      int *pi;};

C::C(int n, int v[])      {      dim=n;      pi= v;      }

ostream& operator<<(ostream &o, const C &m){      for(int j=0; j<m.dim; j++)o<< m.pi[j]<<" ";      return o;}

void main(){      int a[]={1,2,3}, b[]={10,20};      C x(3,a),y(2, b);      a[0]=-100;      cout<<(x=y)<<endl;      }Programul afiseaza:

Answer :  b.  10 2039 Fie urmatorul program:

class A{public:            void s(){cout<<"void A::s()"<<endl;}      void s(int i){i++;cout<<"void A::s(int)"<<endl; }          virtual void v(){cout<<"virtual void A::v()"<<endl;}virtual void v(int i){i++;cout<<"virtual void A::v(int)"<<endl;}

};class B:public A{public:      // 1. supraincarcare metoda statica      int s(){cout<<"int B::s()"<<endl; return 1;}

      // 2. specializare metoda statica      void s(int i){i++;cout<<"void B::s(int)"<<endl; }

      // 3. specializare metoda virtualavirtual void v(int i){i++;cout<<"virtual void B::v(int)"<<endl;}

      // 4. supraincarcare metoda virtuala,        virtual int v(){cout<<"int B::v()"<<endl; return 1;}};

Care definitie este incorecta:   a . 3.

d. 1. Answer : 4

40 5. Metodele statice:  a.   pot fi apelate doar pentru obiecte statice  b.   nu apartin clasei

c.   lucreaza cu datele statice ale clasei

Page 19: Subiecte Pentru Licenta PPOO Vara 2011 (1)

41 Mostenirea este:a.  o metoda de a dezvolta clase abstracte pe baza unor clase concrete

 b.  o metoda de a reutiliza codul sursa  c.   o metoda de a reutiliza codul compilat

42 Mostenirea virtuala rezolva:

Answer ::  b.   problema diamantului43 Polimorfismul:

  b.   utilizeaza legarea dinamica  c.  presupune existenta unor functii membre ale claselor

44 Programarea generica  este: c.     o metoda de a reutiliza codul sursa

  d.  o metoda de a reutiliza codul compilat

45 Programarea cu template  este: a.   o metoda de a dezvolta sabloane de clase si functii

 b.  utilizarea polimorfismului dinamic  d. o metoda de a reutiliza codul compilat

46 Programarea cu template  permite:Answer :  a.  construirea clase derivate din clase baza

b.  o metoda de a dezvolta sabloane de clase si functii  c.  utilizarea polimorfismului dinamic

47 Programarea cu sabloane permite: a.   scrierea de algoritmi generici

b.  mostenirea multipla C.  scrierea de algoritmi genetici

48 Problema diamantului este data de : d.   mostenirea multipla  d.  polimorfism

49 Utilizarea metodelor iniline duce la:

  a.     cresterea vitezei de rulare b. reducerea codului compilat

 c.  aparitia polimorfismului50 Utilizarea metodelor iniline duce la:

Answer :  a.  cresterea codului sursa si a codului executabil