Ex2 Analizati Cu Atentie Urmatorul Fragment de Cod Sursa. Precizati Care Este Ordinea de Apel A Destructorilor. Ce Se Va Afisa Pe Ecran? Cod
Ex2 Analizati Cu Atentie Urmatorul Fragment de Cod Sursa. Precizati Care Este Ordinea de Apel A Destructorilor. Ce Se Va Afisa Pe Ecran? Cod
Ex2 Analizati Cu Atentie Urmatorul Fragment de Cod Sursa. Precizati Care Este Ordinea de Apel A Destructorilor. Ce Se Va Afisa Pe Ecran? Cod
Cod:
class W
{
public:
class R
{
public:
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()
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?
Cod:
class A
{
protected:
int dim;
public:
A(){ cout<<"A::A()"<<endl;}
class B: public A
{
public:
B(){ cout<<"B::B()"<<endl;}
virtual ~B(){ cout<<"B::~B()"<<endl;}
A* p = new B();
p->Create( );
delete p;
return 0;
}
Raspuns:
A::Create(16)
Ex:4
Fie urmatoarea specificare de clasa:
Cod:
class AbstractList{
public:
class A{
public:
};
class B:public A{
public:
// 1. supraincarcare metoda statica
int s(){cout<<"int B::s()"<<endl; return 1;}
Cod:
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;
};
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;
};
Cod:
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();
};
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(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&)
Ex1:
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?
Cod:
class Baza2
{
public:
Baza2(){ Create(); }
~Baza2(){ Create(); }
void Build(){Create(); }
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){}
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;
};
10. EX Examen :
Fie urmatoarea specificare de clasa:
//file abslist.h
#ifndef ABSLIST_H
#define ABSLIST_H
#include “d:\tudor\c_cpp\abstract\abselem.h*
class AbstractList{
public:
virtual void erase()=0;
virtual void put(abstractElm*ae)();
virtual AbstractElm*get()();
virtual int isEmpty()();
virtual int isFull()();
};
#endif
12.Fie programul:
class Persoana{
public:
Persoana(char * n){nume=n;}
void afisare(){cout<<nume<<endl;}
char *nume;
};
13. EX Examen
#include <iostream.h>
class C{
public:
private:
int dim;
int *pi;
};
dim=n;
pi= v;
return o;
void main(){
C x(3,a),y(2, b);
x=y;
y.set(0,-100);
cout<<x<<endl;
Raspuns
Programul afiseaza:
-100 20
14. EX Examen :
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;}
};
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(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:
};
b. Definitia virtual void v(int i) este incorecta deoarece exista o definitie pentru metoda v.