Sunteți pe pagina 1din 63

pag.

pag.1

pag.

pag.2

pag.

pag.3

pag.

pag.4

pag.

pag.5

pag.

pag.6

pag.

pag.7

pag.

pag.8

pag.

pag.9

pag.

pag.10

pag.

pag.11

pag.

pag.12

pag.

pag.13

pag.

pag.14

pag.

pag.15

pag.

pag.16

pag.

Selected Answer: a. reutiliza codul sursa

pag.17

pag.

pag.18

pag.

pag.19

pag.

pag.20

pag.

pag.21

pag.

pag.22

pag.

pag.23

pag.

pag.24

pag.

pag.25

pag.

pag.26

pag.

pag.27

pag.

pag.28

pag.

pag.29

pag.

pag.30

pag.

pag.31

pag.

pag.32

pag.

pag.33

pag.

pag.34

pag.

pag.35

pag.

pag.36

pag.

pag.37

pag.

pag.38

pag.

pag.39

pag.

pag.40

pag.

pag.41

pag.

pag.42

pag.

pag.43

pag.

pag.44

pag.

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:

Answer Selected Answer: d. b.v() corect


;

d.
p->v();

2
Programarea generica este:

Answer Selected Answer: c. o metoda de a reutiliza codul sursa corect 3


Programarea cu template permite:

Answer Selected Answer: b. o metoda de a dezvolta sabloane de corect


clase si functii

4
Fie programul:

class Persoana{ public: Persoana(char * n){nume=n;} void afisare(){cout<<nume<<endl;} char *nume; }; Constructorul Persoana(char *) poate fi utilizat pentru:

Answer Selected Answer: b.Conversia sirurilor de caractere in obiecte Persoana corect

pag.45

pag.

5
Polimorfismul:

Answer Selected Answer: 6

b.
utilizeaza legarea dinamica

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:

Answer Selected Answer: d. Definitia void s(int i)supraincarca definitia void s()

7
Utilizarea metodelor iniline duce la:

Answer Selected Answer:

d.

cresterea codului sursa si a codului executabil


a.

cresterea vitezei de rulare

8
Programarea cu template este:

Answer Selected Answer:

b. o metoda de a dezvolta sabloane de clase si functii

9
Problema diamantului este data de :

Answer Selected Answer: 10

d.
polimorfism

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

pag.46

pag.

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 Selected Answer:

a. R::~R()

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(){ }; classR { public: R(){ }; classFile: publicW, publicR { public: File(){ cout<<"File::File()"<<endl;} }; intmain (intargc, char* argv[]) { R* f = new File(); return0; }

cout<<"W::W()"<<endl;}

cout<<"R::R()"<<endl;}

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

pag.47

pag.

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 Selected Answer:

b. R::~R()

11
Analizati cu atentie urmatorul fragment de cod sursa. Cate clase si cate obiecte avem in programul urmator ?
template<typename T=int, int dim=100> class Vector { T v[dim]; public: Vector(){ memset(v,0,sizeof(v)); } ~Vector(){} void Print(ostream &os) { for (int i=0;i<dim;i++) os << v[i] << ' '; os<<endl; } }; Vector<int, 2> test; int main(int argc, char* argv[]) { Vector<int, Vector<int, Vector<int, Vector<int, 10> 10> 20> 20> v1, v2, &v3=v1; *v4 = &v3; v5; v6(v5);

pag.48

pag.

return 0; }

Answer Selected Answer:

e. 1 clasa si 5 obiecte

12 . Fie urmatoarea specificare de clasa:


class AbstractList{ public: virtual virtual virtual virtual virtual }; Care afirmatie este corecta: b. obiectele clasei nu pot fi construite folosind constructorul; void Create()=0; void put(AbstractElem* ae){}; AbstractElem* get(){}; int isEmpty(){}; int isFull(){};

13 . Fie urmatoarea specificare de clasa:


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

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

pag.49

pag.

b.m(); b.v(); p=&b; p->m(); p->v(); } Care expresie este corecta: c. p->m();

14 . Metodele statice: c. lucreaza cu datele statice ale clasei 15


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

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

pag.50

pag.

17 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() 18 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>&);

pag.51

pag.

19
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;} 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++) return 0; } delete v[i];

d. Circle::~Circle Point::~Point Shape::~Shape Point::~Point Shape::~Shape 20 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:

pag.52

pag.

Complex(float x=0, float y=0):x(x),y(y){} operator Punct(){return Punct(x,y);} operator float(){return x;} private: float x,y; }; Metoda Complex:: operator float() este utilizata pentru Answer d.
Conversia obiectelor Complex in numere reale 21

Fie programul : class Cerc{ public: Cerc(float r):raza(r){} float getRaza(){return raza;} void operator++(){raza++;} private: 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 15 22
Analizati cu atentie urmatorul fragment de cod sursa. Se doreste introducerea in definitia sablonului de clasa Vector a unui operator de acces intexat care sa permita modificarea elementelor vectorului, precizati care este declaratia corecta ?
template<typenameT=int, intdim> classVector {

pag.53

pag.

T v[dim]; public: Vector(){ memset(v,0,sizeof(v)); } ~Vector(){}

//alegeti declaratia operatorului de acces indexat };

Answer
Selected Answer: e.
T &operator[](inti);

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

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

Answer c. 3 24
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{

pag.54

pag.

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 virtuala virtual 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:
Answer 4 25

Mostenirea virtuala rezolva:


Answer Selected Answer: b.

problema diamantului

26
0 din 20 puncte 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 };


Answer Selected Answer: d.

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

27
Programarea cu sabloane permite:
Answer Selected Answer: d.

scrierea de algoritmi generici

28 Mostenirea este o metoda de a reutiliza codul compilat


29
Fie urmatorul program:

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

pag.55

pag.

}; 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 Selected Answer: a.

-100 2 3

30
ntrebarea nr. 10
0 din 10 puncte Analizati cu atentie urmatorul fragment de cod sursa. Alegeti observatia corecta si precizati ce se va afisa pe ecran?

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

}
Answer Selected Answer: e.

Proiectare orientata pe obiecte, codul este corect si complet

31
Analizati cu atentie urmatorul fragment de cod sursa. Alegeti observatia corecta si precizati ce se va afisa pe ecran?

pag.56

pag.

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; } 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; }
Answer Selected Answer: a. Nu se poate spune ce se afiseaza, codul nu se compileaza 20 din 20 puncte 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; }

pag.57

pag.

}; int main(int argc, char* argv[]) { while(true) { Sir * ps = new Sir("Programare in C++"); delete ps; } return 0; }
Answer Selected Answer: a. codul este corect , se compileaza dar ruleaza la infinit

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

class Baza { public: Baza(){ cout<<"B::B()"<<endl;} virtual ~Baza(){ cout<<"B::~B()"<<endl;} }; class Derivat:public Baza { public: Derivat(){ cout<<"D::D()"<<endl;} virtual ~Derivat(){ cout<<"D::~D()"<<endl;} }; int main (int argc, char* argv[]) { Baza *s = new Derivat(); return 0; }
Answer Selected Answer: b. D::D() B::B() B::~B() D::D()

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

pag.58

pag.

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

Answer Selected Answer: 33

c.
p->m();

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); x=y; b[0]= -100; cout<<x<<endl; } Programul afiseaza: {

Answer Selected Answer: 34

d.
-100 20

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

pag.59

pag.

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 Selected Answer: 35

b.
10 20

Analizati cu atentie urmatorul fragment de cod sursa. Precizati care este ordinea de apel a constructorilor si destructorilor. Ce se va afisa pe ecran?
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 Selected Answer:

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

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

pag.60

pag.

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 Selected Answer:

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

37
Analizati cu atentie urmatorul fragment de cod sursa. Alegeti observatia corecta si precizati ce se va afisa pe ecran?
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; } 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;

pag.61

pag.

Answer b.
Proiectare orientata pe obiecte, codul

este corect si complet

38
Analizati cu atentie urmatorul fragment de cod sursa. Precizati care este ordinea de apel a constructorilor si destructorilor. Ce se va afisa pe ecran?
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 Selected Answer:

a. D::D() D::~D()

39
Problema diamantului este data de :

Answer
Selected Answer: d.
mostenirea multipla

40 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; nonempty public: Empty(){} ~Empty(){} };

// typedef members don't make a class

class EmptyToo : public Empty

pag.62

pag.

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

Answer Selected Answer: a.


4 4 4

pag.63

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