Sunteți pe pagina 1din 7

1.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;
Raspuns:File::~File()
R::~R()
W::~W()

Ordine de distrugerea a obiectele este

inversa fata de ordine creerii,cand am creat

s-a apelat pe rand constructorii File::File()


W::W()
R::R()
-cand distrugem se apeleaza invers clasele derivate
File::~File()
R::~R()
W::~W()

2.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;}
……..A* p = new B();
p->Create( );
delete p;
return 0;
Raspuns: A::Create(16)

3.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: AbstractList *pa;
4.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)
……….
// 4. supraincarcare metoda virtuala,
virtual int v(){cout<<"int B::v()"<<endl; return 1;}
Care definitie este incorecta: 4.
virtual void v() este in A si in b este int functia virtuala trebuie sa isi pastreze prototipul
referitor la un post mai vechi.
// 4.supraincarcare metoda virtuala,
int void v(){count<<"int B::()"<<endl;return 1;}

5.Fie urmatoarea specificare de clase:

class Complex;
class Punct{
public:
Punct(float x=0, float y=0):x(x),y(y){}
operator Complex();
……..
operator Punct(){return Punct(x,y);}
operator float(){return x;}
private:
float x,y;
Metoda Complex:: operator float() este utilizata pentru
Raspuns: Normal operator float() returneaza x dar care x ?
float e cuvant rezervat lui C++ si nu stiu daca poate fi rescris

float x,y; };X-ul ingrosat il returneaza

6.Fie urmatorul program:

class A{
public:
void m(){cout<<"A:m()"<<endl;};
virtual void v(){cout<<"A:v()"<<endl;};
………
A a,*p;
B b;
b.m();
b.v();
p=&b;
p->m();
p->v();
Care expresie este corecta: p->m(); raspuns bun
deoarce m si v din B sunt private

8.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;
}
……
Baza2 *p = new Derivat2();
p->Build();
delete p;
return 0;
Raspuns: B::Create: d = 16
D::Create: d = 16
B::Create: d = 16
9.Fie urmatoarea specificare de clase:
class Complex;
class Punct{
public:
Punct(float x=0, float y=0):x(x),y(y){}
………..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
Conversia obiectelor Complex in numere reale Raspuns Bun
Conversia unui obiect Punct in obiect Complex

10.Fie urmatoarea specificare de clasa:


//file abslist.h
#ifndef ABSLIST_H
#define ABSLIST_H
#include “d:\tudor\c_cpp\abstract\abselem.h*
class AbstractList{
…………
virtual void put(abstractElm*ae)();
virtual AbstractElm*get()();
virtual int isEmpty()();
virtual int isFull()();
};
#endif
Care afirmatie este corecta?

A. AbstractList este o clasa abstracta

11. Fie programul :


#include <iostream.h>
class Cerc{
public:
Cerc(float r):raza(r){}
float getRaza(){return raza;}
void operator++(){raza++;}
private:
………..void main(){
Cerc *pc;
Cilindru c(1,5);
pc=&c;
++ *pc;
cout<<pc->getRaza()<<" "<<c.getInaltime()<<endl;
getch();
Programul afiseaza :2 5

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

13. EX Examen

#include <iostream.h>

class C{

public:

C(int n=0, int v[]);

void set(int i, int val){pi[i]=val;}

friend ostream& operator<<(ostream &o, const C&);

private:

int dim;

int *pi;

………….void main(){

int a[]={1,2,3}, b[]={10,20};

C x(3,a),y(2, b);

x=y;

y.set(0,-100);cout<<x<<endl;

Raspuns Programul afiseaza: -100 20


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;}
………….Baza a;
Baza b = a;
Baza c(b);
return 0;
} B::B(B&)
B::B(B&)
B::B(B&)

…….B::B(B)
B::B(B&)
B::B()
B::B(B&)
B::B(B&)
B::B()
B::B()
B::B()

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

15. Ex examen

#include <iostream.h>

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)

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