0% found this document useful (0 votes)
141 views

Scrap

The document contains 10 multiple choice questions about C++ programming concepts such as polymorphism, templates, inheritance, and destructors. The questions test understanding of when virtual functions are called, what problem the diamond problem refers to, how templates allow code reuse, and the order that destructors are called. The selected answers provided indicate the document is assessing a test taker's knowledge of basic and intermediate C++ programming concepts.

Uploaded by

alexdeejayy
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
141 views

Scrap

The document contains 10 multiple choice questions about C++ programming concepts such as polymorphism, templates, inheritance, and destructors. The questions test understanding of when virtual functions are called, what problem the diamond problem refers to, how templates allow code reuse, and the order that destructors are called. The selected answers provided indicate the document is assessing a test taker's knowledge of basic and intermediate C++ programming concepts.

Uploaded by

alexdeejayy
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 60

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: corect


d.
b.v();

 d. 
p->v();

2
Programarea generica  este:
Answer
Selected Answer: corect
c.
o metoda de a
reutiliza codul
sursa

3
Programarea cu template 
permite:
Answer
Selected Answer: corect
b.
o metoda de a
dezvolta sabloane de
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: corect
b.Conversia sirurilor de
caractere in obiecte Persoana

5
Polimorfismul:
Answer
Selected Answer:
 b. 
utilizeaza legarea
dinamica

6
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:
 d. 
polimorfism

10
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
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(){ cout<<"W::W()"<<endl;}

};

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

};

classFile: publicW, publicR


{
public:
File(){ cout<<"File::File()"<<endl;}

};

intmain (intargc, char* argv[])


{

R* f = new File();
return0;
}
Answer
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
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,
10> v1, v2, &v3=v1;
Vector<int,
10> *v4 = &v3;
Vector<int,
20> v5;
Vector<int,
20> v6(v5);

return 0;
}
Answer
Selected Answer:
 e. 
1 clasa si 5 obiecte
Vector<int,
20> v5;
Vector<int,
20> v6(v5);

return 0;
}
Answer
Selected Answer:
 e. 
1 clasa si 5 obiecte

12
. 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:


 b.  obiectele clasei nu pot fi construite folosind constructorul;

13
. 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;

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;
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:
INCLUDEPICTURE "http://94.176.181.35/images/ci/icons/check.gif" \* MERGEFORMATINET  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)

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>&);
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++)      delete v[i];


      return 0;
}
 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:
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
{
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{
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=1


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

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
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?
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:
INCLUDEPICTURE "http://94.176.181.35/images/ci/icons/x.gif" \* MERGEFORMATINET  a.  
Nu se poate spune ce se afiseaza, codul nu se compileaza

20 din 20 puncte

INCLUDEPICTURE "http://94.176.181.35/images/ci/icons/grade-correct_u.gif" \* MERGEFORMATINET 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; }

};

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


{

while(true)
{
Sir * ps = new Sir("Programare in C++");
delete ps;
}
return 0;
}
Answer
Selected Answer:
INCLUDEPICTURE "http://94.176.181.35/images/ci/icons/check.gif" \* MERGEFORMATINET  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
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:
Answer
Selected Answer:
c.
p->m();

33
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:
d.
-100 20

34
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:
Answer
Selected Answer:
b.
10 20

35

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()
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
{
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;
}
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; //
typedef members don't
make a class nonempty
public:
Empty(){}
~Empty(){}
};

class EmptyToo : public


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

class EmptyThree : public


EmptyToo
{
public:
EmptyThree(){}
virtual ~EmptyThree
(){}
};
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 nonempty
public:
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;
}
Answer
Selected Answer:
a.
4 4 4

Întrebarea nr. 1 . 5 din 5 puncte


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

Întrebarea nr. 2 . 5 din 5 puncte


Utilizarea metodelor iniline duce la:
Answer c. cresterea vitezei de rulare

Întrebarea nr. 3 . 5 din 5 puncte


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:
Answer a. 10 20

Întrebarea nr. 6 . 5 din 5 puncte

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 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 a. 4.

Întrebarea nr. 12 .20 din 20 puncte

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:
virtual ~Clasa1(){ cout<<"C1::~C1()"<<endl; }
};

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

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

};
int main (int argc, char* argv[])
{
System a;
return 0;
}
Answer d. S::~S()
C1::~C1()
C2::~C2()

• Întrebarea nr. 1

0 din 5 puncte

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 a.
Answer: p=&b;

• Întrebarea nr. 2

0 din 5 puncte

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
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 d.
Answer: p->v();

• Întrebarea nr. 3

0 din 5 puncte

Programarea generica este:


Answer
d.
o metoda
Selected de a
Answer: reutiliz
a codul
compilat

• Întrebarea nr. 4

0 din 5 puncte

Programarea cu template
permite:
Answer
b.
utilizar
Selected ea
Answer: polimorf
ismului
dinamic

Întrebarea nr. 5

0 din 5 puncte

Fie programul:

class Persoana{
public:
Persoana(char
* n){nume=n;}
void afisare()
{cout<<nume<<endl;}
char *nume;
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
a.
Selected Construirea
Answer: de siruri de
caractere

• Întrebarea nr. 6

5 din 5 puncte

Polimorfismul:
Answer
b.
Selected utilizea
za
Answer: legarea
dinamica

• Întrebarea nr. 7

0 din 5 puncte

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
d.
void s
Selected (int i)
Answer: este
metoda
virtuala

• Întrebarea nr. 8

0 din 5 puncte

Utilizarea metodelor iniline


duce la:
Answer
c.
Selected aparitia
Answer: polimorf
ismului
• Întrebarea nr. 9

0 din 10 puncte

Programarea cu template
permite:
Answer
d.
Selected reutiliz
Answer: a codul
compilat

• Întrebarea nr. 10

0 din 10 puncte

Problema diamantului este


data de :
Answer
Selected d.
polimorf
Answer: ism

• Întrebarea nr. 11

20 din 20 puncte

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
Selected a.
Answer: R::~R()
Întrebarea nr. 12

0 din 20 puncte

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, 10> v1, v2, &v3=v1;


Vector<int, 10> *v4 = &v3;
Vector<int, 20> v5;
Vector<int, 20> v6(v5);

return 0;
}
Answer

e.
Selected Answer:
1 clasa si 5 obiecte

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:

 b.  obiectele clasei nu pot fi construite folosind constructorul;

------------------------------------------------------------------------------------------------------------------------------------

2. 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


------------------------------------------------------------------------------------------------------------------------------------

3. 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=&b;
p->m();
p->v();

}
Care expresie este corecta:

 c.  p->m();
------------------------------------------------------------------------------------------------------------------------------------

4. Programarea cu template  este:

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


------------------------------------------------------------------------------------------------------------------------------------

5. Metodele statice:

 c.  lucreaza cu datele statice ale clasei


------------------------------------------------------------------------------------------------------------------------------------

6. 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;


------------------------------------------------------------------------------------------------------------------------------------

7. Derivarea este:

 d.  o metoda de a reutiliza codul sursa


------------------------------------------------------------------------------------------------------------------------------------

8. 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:

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


------------------------------------------------------------------------------------------------------------------------------------

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)
------------------------------------------------------------------------------------------------------------------------------------

10. 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()
------------------------------------------------------------------------------------------------------------------------------------

11. 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>&);

------------------------------------------------------------------------------------------------------------------------------------

12. 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++)      delete v[i];


      return 0;
}

 d. 
Circle::~Circle
Point::~Point
Shape::~Shape
Point::~Point
Shape::~Shape

Întrebarea nr. 1
• 5 din 5 puncte
Programarea cu template este:
Answer
b.
o metoda de a
Selected Answer: dezvolta
sabloane de
clase si
functii

1. Întrebarea nr. 2
• 0 din 5 puncte
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:


Answer
c.
Selected Answer: AbstractList
*pa=new
AbstractList();

1. Întrebarea nr. 3
• 0 din 5 puncte
Fie urmatorul program:

class A
{
public:
void m(){cout<<"A:m
()"<<endl;};
virtual void v(){cout<<"A:v
()"<<endl;};
};
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: b.
p=&b;

1. Întrebarea nr. 4
• 5 din 5 puncte
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;}
private:
float x,y;
};

Metoda Complex:: operator float() este utilizata


pentru
Answer
d.
Selected Answer: Conversia obiectelor
Complex in numere
reale

1. Întrebarea nr. 5
• 5 din 5 puncte
Metodele statice:
Answer
d.
Selected Answer: lucreaza cu
datele statice
ale clasei

1. Întrebarea nr. 6
• 5 din 5 puncte
Programarea generica este:
Answer
c.
Selected Answer: o metoda de a
reutiliza codul
sursa
Programarea generica este:
Answer
c.
Selected Answer: o metoda de a
reutiliza codul
sursa

1. Întrebarea nr. 7
• 0 din 5 puncte
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

Selected Answer: a.
1 6

1. Întrebarea nr. 8
• 5 din 5 puncte
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
a.
Definitia void
Selected Answer: s(int i)
supraincarca
definitia void
s()

1. Întrebarea nr. 9
• 0 din 10 puncte
Programarea cu template permite:
Answer
b.
Selected Answer: reutiliza codul
binar

1. Întrebarea nr. 10
• 0 din 10 puncte

Analizati cu atentie urmatorul fragment de


cod sursa. Precizati care este ordinea de
apel a constructorilor. 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();
return 0;
}
Answer
c.
Selected Answer: R::R()
File::File()

1. Întrebarea nr. 11
• 20 din 20 puncte

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<typename T=int, int dim>


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

//alegeti declaratia
operatorului de acces indexat
};
Answer
e.
Selected Answer: T &operator[]
(int i);

1. Întrebarea nr. 12
• 20 din 20 puncte

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
c.
3
Selected Answer:

*
Întrebarea nr. 1

Incorrect
Utilizarea metodelor iniline duce la:
Answer
Selected Answer: a.
reducerea codului compilat
*
Întrebarea nr. 2

Incorrect
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:
Answer
Selected Answer: b.
-100 2 3
*
Întrebarea nr. 3
Incorrect
Programarea generica este:
Answer
Selected Answer: c.
o metoda de a reutiliza codul compilat
*
Întrebarea nr. 4

5 din 5 puncte

Correct
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: d.
-100 20
*
Întrebarea nr. 5

Incorrect
Polimorfismul:
Answer
Selected Answer: c.
presupune existenta unor functii cu mai multe prototipuri
*
Întrebarea nr. 6

5 din 5 puncte

Correct
Programarea cu template permite:
Answer
Selected Answer: a.
reutiliza codul sursa
*
Întrebarea nr. 7

Incorrect
Mostenirea este:

Answer
Selected Answer: d.
o metoda de a reutiliza codul sursa
*
Întrebarea nr. 8

Incorrect
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=&b;
p->m();
p->v();

}
Care expresie este corecta:
Answer
Selected Answer: b.
p->f();
*
Întrebarea nr. 9

Incorrect
Programarea cu sabloane permite:
Answer
Selected Answer: a.
mostenirea multipla
*
Întrebarea nr. 10

Incorrect
Programarea cu template permite:
Answer
Selected Answer: a.
reutiliza codul compilat
*
Întrebarea nr. 11

Incorrect
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, 10> v1, v2, &v3=v1;


Vector<int, 10> *v4 = &v3;
Vector<int, 20> v5;
Vector<int, 20> v6(v5);

return 0;
}
Answer

*
Întrebarea nr. 12

Incorrect
Analizati cu atentie codul urmator. Care este modul de actiune a destructorilor?

class Shape
{
public:
Shape() { cout<<"Shape::Shape"<<endl;}
~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++) delete v[i];


return 0;
}
Answer
Selected Answer: c.
Shape::~Shape
Point::~Point
Circle::~Circle
Shape::~Shape
Point::~Point

• Întrebarea nr. 1
5 din 5 puncte

Utilizarea metodelor iniline


duce la:
Answer
a.
crestere
Selected a
Answer: vitezei
de
rulare
Utilizarea metodelor iniline
duce la:
Answer
a.
crestere
Selected a
Answer: vitezei
de
rulare

• Întrebarea nr. 2
0 din 5 puncte

Metodele statice:
Answer
b.
Selected nu
Answer: apartin
clasei

• Întrebarea nr. 3
0 din 5 puncte

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
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
Selected d.
Answer: 3.
• Întrebarea nr. 4
5 din 5 puncte

Programarea cu sabloane
permite:
Answer
d.
scrierea
Selected de
Answer: algoritm
i
generici

• Întrebarea nr. 5
0 din 5 puncte

Mostenirea este:

Answer
b.
o metoda
Selected de a
Answer: reutiliz
a codul
sursa

• Întrebarea nr. 6
0 din 5 puncte

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 b.
Answer: p=&a;

• Întrebarea nr. 7
0 din 5 puncte

Fie urmatorul
program:

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

private:
int dim;
int *pi;
};
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:
Answer
Selected a.
Answer: -100 2 3

• Întrebarea nr. 8
5 din 5 puncte

Programarea generica este:


Answer
c.
o metoda
Selected de a
Answer: reutiliz
a codul
sursa

• Întrebarea nr. 9
0 din 10 puncte

Programarea cu sabloane
permite:
Answer
c.
scrierea
Selected de
Answer: algoritm
i
genetici

• Î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; }
};
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
e.
Proiectare
Selected orientata pe
Answer: obiecte, codu
l este corect si
complet

• Întrebarea nr. 11
0 din 20 puncte

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
b.
D::D()
Selected
B::B()
Answer:
B::~B()
D::D()

• Întrebarea nr. 12
0 din 20 puncte

Analizati cu atentie codul urmator. Care este modul de actiune a destructorilor?


class Shape
{
public:
Shape() { cout<<"Shape::Shape"<<endl;}
~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++) delete v[i];


return 0;
}
Answer

b.
Circle::~Circle
Point::~Point
Shape::~Shape
Selected Answer:
Point::~Point
Shape::~Shape

• Întrebarea nr. 1
5 din 5 puncte

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
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
Selected c.
Answer: 4.

• Întrebarea nr. 2
0 din 5 puncte

Derivarea este:

Answer
b.
o metoda
de a
dezvolta
interfet
Selected e pe
Answer:
baza
unor
clase
Derivarea este:

Answer
b.
o metoda
de a
dezvolta
interfet
Selected e pe
Answer:
baza
unor
clase
abstract
e

• Întrebarea nr. 3
5 din 5 puncte

Utilizarea metodelor iniline


duce la:
Answer
d.
crestere
a
codului
Selected sursa si
Answer:
a
codului
executab
il

• Întrebarea nr. 4
0 din 5 puncte

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
b.
Selected Construirea
Answer: de siruri de
caractere

• Întrebarea nr. 5
0 din 5 puncte

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
d.
Definiti
a
virtual
void v
(int i)
este
Selected incorect
Answer:
a
deoarece
exista o
definiti
e pentru
metoda
v.
A::v()"<<endl;}
virtual void v(int
i){i+
+;cout<<"virtual
void A::v
(int)"<<endl;}
};
Care afirmatie este
corecta:
Answer
d.
Definiti
a
virtual
void v
(int i)
este
Selected incorect
Answer:
a
deoarece
exista o
definiti
e pentru
metoda
v.

• Întrebarea nr. 6
0 din 5 puncte

Metodele statice:
Answer
a.
pot fi
apelate
Selected doar
Answer:
pentru
obiecte
statice

• Întrebarea nr. 7
0 din 5 puncte

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:


Answer
c.
Obiectel
e se
Selected creaza
Answer:
cu
metoda
Create

• Întrebarea nr. 8
5 din 5 puncte

Programarea generica este:


Answer
b.
o metoda
Selected de a
Answer: reutiliz
a codul
sursa

• Întrebarea nr. 9
10 din 10 puncte

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;
}
Answer
d.
Selected S::~S()
Answer: C2::~C2()
C1::~C1()
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;
}
Answer
d.
Selected S::~S()
Answer: C2::~C2()
C1::~C1()

• Întrebarea nr. 10
10 din 10 puncte

Mostenirea virtuala rezolva:


Answer
b.
Selected problema
Answer: diamantu
lui

• Întrebarea nr. 11
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 d


im=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
d.
friend
void operato
Selected
r>>(istream
Answer:
&,
Vector<T,dim
>&);

• Întrebarea nr. 12
20 din 20 puncte

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

c.
R::~R()
Selected Answer:

• Întrebarea nr. 1
0 din 5 puncte

Derivarea este:

Answer
c.
o metoda
Selected de a
reutiliz
Answer: a codul
executab
il

• Întrebarea nr. 2
5 din 5 puncte

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=&b;
p->m();
p->v();

}
Care expresie este
corecta:
Answer
Selected c.
Answer: p->m();

• Întrebarea nr. 3
5 din 5 puncte

Fie urmatorul
program:

class C{
public:
C(int n=0, int
v[]);
friend ostream&
operator<<(ostream
&o, const C&);
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 d.
Answer: -100 20

• Întrebarea nr. 4
5 din 5 puncte

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 d.
Answer: b.v();
p=&a; p->m(); p->v
();
p=&b; p->m();
p->v();
}

Care expresie este


incorecta:
Answer
Selected d.
Answer: b.v();

• Întrebarea nr. 5
5 din 5 puncte

Programarea cu sabloane
permite:
Answer
a.
scrierea
Selected de
Answer: algoritm
i
generici

• Întrebarea nr. 6
5 din 5 puncte

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
c.
Definiti
a void s
Selected (int i)
suprainc
Answer: arca
definiti
a void s
()

• Întrebarea nr. 7
5 din 5 puncte

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;
}
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:
Answer
Selected b.
Answer: 10 20

• Întrebarea nr. 8
5 din 5 puncte

Mostenirea este:

Answer
d.
o metoda
Selected de a
Answer: reutiliz
a codul
compilat

• Întrebarea nr. 9
0 din 10 puncte

Programarea cu template
permite:
Answer
a.
construi
rea
Selected clase
Answer: derivate
din
clase
baza

• Întrebarea nr. 10
0 din 10 puncte

Analizati cu atentie
urmatorul fragment de
cod sursa. Precizati care
este ordinea de apel a
destructorilor. Ce se va
afisa pe ecran?
class W
{
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
Selected b.
Answer: R::~R()

• Întrebarea nr. 11
20 din 20 puncte

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
e.
B::B()
Selected
D::D()
Answer:
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
e.
B::B()
Selected
D::D()
Answer:
D::~D()
B::B()

• Întrebarea nr. 12
20 din 20 puncte

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

Întrebarea nr. 1
0 din 5 puncte

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
b.
Definiti
a void s
(int i)
este
Selected incorect
a
Answer: deoarece
exista o
definiti
e pentru
metoda
s.

! Întrebarea nr. 2
0 din 5 puncte

Programarea cu template
permite:
Answer
a.
construi
rea
Selected clase
Answer: derivate
din
clase
baza

! Întrebarea nr. 3
5 din 5 puncte

Utilizarea metodelor iniline


duce la:
Answer
a.
crestere
a
Selected codului
sursa si
Answer: a
codului
executab
il
Utilizarea metodelor iniline
duce la:
Answer
a.
crestere
a
Selected codului
sursa si
Answer: a
codului
executab
il

! Întrebarea nr. 4
5 din 5 puncte

Programarea generica este:


Answer
a.
o metoda
Selected de a
Answer: reutiliz
a codul
sursa

! Întrebarea nr. 5
0 din 5 puncte

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:
Answer
c.
Abstract
Selected List
Answer: *pa=new
Abstract
List();

! Întrebarea nr. 6
0 din 5 puncte

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:
Answer
c.
Abstract
Selected List
Answer: este o
clasa
concreta
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:
Answer
c.
Abstract
Selected List
Answer: este o
clasa
concreta

! Întrebarea nr. 7
5 din 5 puncte

Metodele statice:
Answer
c.
lucreaza
Selected cu
datele
Answer: statice
ale
clasei

! Întrebarea nr. 8
0 din 5 puncte

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
virtuala
virtual void v(int
i){i+
+;cout<<"virtual
void B::v
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
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
Selected d.
Answer: 1.

! Întrebarea nr. 9
10 din 10 puncte

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
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
d.
Selected C1::C1()
Answer: C2::C2()
S::S()

! Î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;
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
b.
Proiecta
re
orientat
Selected a pe
Answer: obiecte,
codul este
corect si
complet

! Întrebarea nr. 11
0 din 20 puncte

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()
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
a.
Selected
D::D()
Answer:
D::~D()

! Întrebarea nr. 12
0 din 20 puncte

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.
5

Selected Answer:

ntrebarea nr. 1
0 din 5 puncte

INCLUDEPICTURE "http:// Utilizarea metodelor iniline


94.176.181.35/images/ci/ duce la:
icons/grade-incorrect_u.gif" \*
MERGEFORMATINET Answer
Selected Answer:
INCLUDEPICTURE "http://94.176.181.35/images/ci/icons/x.gif" \* MERGEFORMATINET  b.  
reducerea codului compilat

Întrebarea nr. 2
5 din 5 puncte

Fie urmatoarea specificare de


clasa:

class AbstractList{
public:

virtual void
Create()=0;
virtual void
INCLUDEPICTURE "http:// put(AbstractElem*
94.176.181.35/images/ci/ ae){};
icons/grade-correct_u.gif" \* virtual
MERGEFORMATINET AbstractElem* get()
{};
virtual int
isEmpty(){};
virtual int
isFull(){};
};

Care afirmatie este


corecta:
Answer
Selected Answer:
INCLUDEPICTURE "http://94.176.181.35/images/ci/icons/check.gif" \* MERGEFORMATINET  c.  
obiectele clasei nu pot fi construite
folosind constructorul;

Întrebarea nr. 3
0 din 5 puncte

INCLUDEPICTURE "http:// Programarea generica  este:


94.176.181.35/images/ci/
icons/grade-incorrect_u.gif" \* Answer
MERGEFORMATINET
Selected Answer:
INCLUDEPICTURE "http://94.176.181.35/images/ci/icons/x.gif" \* MERGEFORMATINET  d.  
o metoda de a reutiliza codul
compilat

Întrebarea nr. 4
5 din 5 puncte

INCLUDEPICTURE "http://94.176.181.35/images/ci/icons/grade-correct_u.gif" \* MERGEFORMATINET Derivarea este:


    

Answer
Selected Answer:
INCLUDEPICTURE "http://94.176.181.35/images/ci/icons/check.gif" \* MERGEFORMATINET  c.  
o metoda de a dezvolta clase concrete
pe baza unor clase abstracte

Întrebarea nr. 5
5 din 5 puncte

INCLUDEPICTURE "http:// Programarea cu template 


94.176.181.35/images/ci/ este:
icons/grade-correct_u.gif" \*
MERGEFORMATINET Answer
Selected Answer:
INCLUDEPICTURE "http://94.176.181.35/images/ci/icons/check.gif" \* MERGEFORMATINET  d.  
o metoda de a dezvolta sabloane de
clase si functii

Întrebarea nr. 6
0 din 5 puncte

INCLUDEPICTURE "http://94.176.181.35/images/ci/icons/grade-incorrect_u.gif" \* MERGEFORMATINET 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:


Answer
Selected Answer:
INCLUDEPICTURE "http://94.176.181.35/images/ci/icons/x.gif" \* MERGEFORMATINET  c.  
AbstractList *pa=new AbstractList();

Întrebarea nr. 7
5 din 5 puncte

INCLUDEPICTURE "http://94.176.181.35/images/ci/icons/grade-correct_u.gif" \* MERGEFORMATINET 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:
INCLUDEPICTURE "http://94.176.181.35/images/ci/icons/check.gif" \* MERGEFORMATINET  b.  
Definitia virtual void v()supraincarca
definitia virtual void v(int i)

Întrebarea nr. 8
0 din 5 puncte

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:
INCLUDEPICTURE "http:// float x,y;
94.176.181.35/images/ci/ };
icons/grade-incorrect_u.gif" \* class Complex{
MERGEFORMATINET public:
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
Selected Answer:
INCLUDEPICTURE "http://94.176.181.35/images/ci/icons/x.gif" \* MERGEFORMATINET  b.  
Conversia unui obiect Complex in
obiect Punct

Întrebarea nr. 9
0 din 10 puncte

INCLUDEPICTURE "http://94.176.181.35/images/ci/icons/grade-incorrect_u.gif" \* MERGEFORMATINET 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:
INCLUDEPICTURE "http://94.176.181.35/images/ci/icons/x.gif" \* MERGEFORMATINET  a.  
Nu se poate spune ce se afiseaza, codul
nu se compileaza

Întrebarea nr. 10
0 din 10 puncte

INCLUDEPICTURE "http:// Polimorfismul:


94.176.181.35/images/ci/
icons/grade-incorrect_u.gif" \* Answer
MERGEFORMATINET
Selected Answer:
INCLUDEPICTURE "http://94.176.181.35/images/ci/icons/x.gif" \* MERGEFORMATINET  c.  
presupune existenta unor functii
membre ale claselor

Întrebarea nr. 11
20 din 20 puncte

INCLUDEPICTURE "http://94.176.181.35/images/ci/icons/grade-correct_u.gif" \* MERGEFORMATINET 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++)      delete v[i];


      return 0;
}
Answer
Selected Answer:
INCLUDEPICTURE "http://94.176.181.35/images/ci/icons/check.gif" \* MERGEFORMATINET  b.  
Circle::~Circle
Point::~Point
Shape::~Shape
Point::~Point
Shape::~Shape

Întrebarea nr. 12
20 din 20 puncte

INCLUDEPICTURE "http://94.176.181.35/images/ci/icons/grade-correct_u.gif" \* MERGEFORMATINET 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; }

};

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


{

while(true)
{
Sir * ps = new Sir("Programare in C++");
delete ps;
}
return 0;
}
Answer
Selected Answer:
INCLUDEPICTURE "http://94.176.181.35/images/ci/icons/check.gif" \* MERGEFORMATINET  a.  
codul este corect , se compileaza dar ruleaza la infinit

You might also like