Sunteți pe pagina 1din 12

Tema: Clase.

Mostenire simpla si compusa in C++


Scopul lucrării: Obtinerea deprinderii practice de elaborare si depanare a
programelor utilizind clase, mostenire simpla si compusa. Utilizarea tehnicilor de
baza pentru prelucrarea si modificarea claselor. Lucrul cu operatorii de acces.

Considerații teoretice:

O clasa reprezinta o metoda logica de organizare a datelor si functiilor unei aceleiasi familii.
Avind la dispozitie o clasa, un programator poate sa creeze obiecte din acea clasa. Un obiect(sau
o instanta) este o instantiere a unei clase. Instantierea reprezinta crearea unui obiect concret pe
baza unei difinitii sau a unui model.
O clasa se declara cu ajutorul cuvintului cheie: class. O clasa poate contine in membrii sai si
functii.
Sintaxa de declarare a unei clase:
class nume_clasa
{ private://specificator de acces
//date si functii private
public:// specificator de acces
//date si functii publice
private:// specificator de acces
//date si functii private
};
unde:
nume_clasa – reprezinta numele clasei(tip definit de utilizator).
Corpul clasei poate contine membrii care pot fi atit declaratii de date cit si declaratii de functii.
Optional etichetele de permisiune, care pot fi una din urmatoare cuvinte cheie:
*private-membrii clasei sunt accesibili numai din cadrul altor membri alei aceleiasi clase sau din
clase prietene.
*protected- membrii clasei sunt accesibili numai din cadrul altor membri alei aceleiasi clase sau
din clase prietene si totodata din membrii claselor derivate.
*public-membrii sunt accesibili de oricunde clasa este vizibila .

SDE 525.3 152 03 ME


Mod Coala Nr. document. Semnat. Data
Elaborat Beleniuc C Litera Coala Coli
V. Derevlenco 2 Coli 6
Verificat
Clase. Mostenire.
UTM.FIMET.TLC-152
Daca se declara membrii unei clase inainte de a include o eticheta de permisiune acestia vor fi
considerati implicit private.
Se prefera definirea in cadrul clasei a functiilor care au ca corp mic sau foarte mic. Restul
functiilor vor fi definite in afara clasei utilizind operatorul ::.
Pentru a defini o functie in afara clasei se va utiliza urmatoarea sintaxa:
tip_functie nume_clasa::nume functie(parametri)
{instructiuni;}
Un lucru important il constituie este operatorul ::  ( operatorul de specificare de domeniu)
care permite definirea unui membru în afara corpului clasei, în afara definitiei ei. 
Constructori
Constructorii sunt metode speciale care folosesc la crearea si initializarea instantelor unei
clase.
Constructorii au acelasi nume ca si clasa careia ii apartine si sunt apelati de fiecare data cind
sunt create noi instante ale clasei. Constructorii asigura initializarea tuturor variabilelor ale
obiectelor unei clase si constituie o garantie ca initializarea unui obiect se executa macar o
singura data.
O clasa poate avea mai multi constructori, care difera intre ei prin numarul si tipul
parametrilor acestora. La intilnirea declaratiei unui obiect se apeleaza automat un constructor al
clasei respective.
Proprietatile constructorilor:
1. Constructorul are acelasi nume ca si clasa.
2. Nu intorc nici o valoare.
3. O clasa poate avea mai multi constructori.
4. Apelul constructorului se realizeaza la crearea unui obiect.
5. In cazul in care o clasa nu are nici un contructor declarant de catre programator
compilatorul genereaza automat un constructor implicit.
Destuctorii
Destructorii sunt metode ale claselor care actioneaza invers fata de constructori. Destructorul
elibereaza memoria alocata de constructor si este apelat automat la iesirea din blocul in care este
recunoscut acel obiect .
Proprietatile destructorilor:
1. Are acelasi nume ca si clasa careia ii apartine.
2. Numele destructorului este precedat de simbolul “~”.

Coala
SDE 525.3 152 03 ME
Mod Coala Nr. document Semnat. Data 3
3. O clasa contine un singur destructor.
4. Destructorul nu are parametri si nu intoarce valori.
5. Daca programatorul nu a definit nici un destructor, compilatorul genereaza automat un
destructor pentru clasa respectiva.
6. Destructorii se apeleaza la incheierea timpului de viata a obiectelor.

Mostenire. Clase de baza. Clase derivate.


Una din caracteristicile programarii orientate pe obiect face posibila aplicarea mecanismului de
mostenire.
Mostenirea consta in preluarea atributelor de la o clasa numita clasa de baza la o alta clasa
numita clasa derivata. Clasele derivate poseda toate caracteristicile clasei de baza care pot fi
imbunatatite atit functional cit si structural.
Mostenirea poate fi simpla sau multipla, dupa cum clasa derivata mosteneste caracteristicile de la
o clasa de baza sau de la mai multe clase de baza.
Procesul de mostenire ofera o serie de avantaje care constau in:
1. Posibilitatea reutilizarii codului comun pentru mai multe clase.
2. Sansa functiilor care folosesc obiecte din clasa de baza de a dispune si de obiecte dintr-o
clasa derivata.
3. Obtinerea extensiei unei clase fara a fi necesara o recompilare a clasei initiale.
Realizarea codului este posibila in programarea orientata pe obiect sub doua aspecte:
1. Prin compunere-includerea de obiecte in cadrul altor obiecte.
2. Prin mostenire- crearea unor obiecte folosind o colectie de obiecte existente la un
moment dat.
Pentru utilizarea unei clase derivate se va folosi urmatoarea sintaxa:
class identif_clasa_derivata:specificator _de_acces_clasa_baza
{corpul clasei derivate}

Varianta8:
Sa se implimenteze o clasa la alegere ce va mosteni informatie de la minim 3 clase diferite.

Listingul programului:

Coala
SDE 525.3 152 03 ME
Mod Coala Nr. document Semnat. Data 3
//mostenire
#include<stdio.h>
#include<iostream.h>
#include<conio.h>
#include<math.h>
#define pi 3.14159265
class hexagon_regulat
{
protected :
float l;
public:
hexagon_regulat();
int verific_figura()
{
if((l<=0))
{return(0);}else {
return 1;} }

float perimetru();
float aria();
float cerc_inscris();
float cerc_circumscris();
float aria_inel();
void afis();
};

class cilindru : public hexagon_regulat //clasa


derivata a clasei hexagon
{

Coala
SDE 525.3 152 03 ME
Mod Coala Nr. document Semnat. Data 3
public:
float h;

public:
cilindru();

void aria_laterala_cilindru_circumscris()
{
cout<<"\nDatele despre cilindru cu inaltimea:"<< h;
cout<<"\nAria laterala a cilindrului circumscris:
"<<2*pi*l*h;};
void aria_totala_cc(){cout<<"\nAria totala a
cilindrului circumscris: "<<(2*pi*l*h)+2*(pi*l*l);};

void aria_bazei_mari(){cout<<"\nAria bazei


cilindrului"<<pi*l*l;};

void volumul_cilindru(){cout<<"\nVolumul cilindru: "<<


(pi*(l*l)*h);};

} ;

class perimetru_ariei_laterale : public cilindru


{
protected:float a ;
public :
void perimetru_al()
{

Coala
SDE 525.3 152 03 ME
Mod Coala Nr. document Semnat. Data 3
a=(4*pi*l)+2*h;
cout<<"\nPerimetru suprafetei laterale:"<<a;
cout<<"\
n------------------------------------------------------
-----------";}

} ;

class sfera : public cilindru


{ protected: float g;
public:

void volum(){
cout<<"\nDatele despre sfera" ;
g=0.2*h; cout<<"\nVolumul sferei cu raza= 1/5*h: "<<
(4/3)*(pow(g,3)*pi);}
void aria (){g=0.2*h; cout<<"\nAria sferei cu raza
1/5*h: "<<4*pi*pow(g,2);
cout<<"\
n------------------------------------------------------
-----------\n" ;}

} ;

hexagon_regulat::hexagon_regulat()
{

Coala
SDE 525.3 152 03 ME
Mod Coala Nr. document Semnat. Data 3
cout<<"Introdu latura hexagonului regulat:";

cin>>l;
}

cilindru::cilindru()
{cout<<"Introdu inaltimea:";
cin>>h;
}

float hexagon_regulat::perimetru()
{float p;
if(verific_figura())
{
p=6*l;
return(p);
}
else return(0);
}

float hexagon_regulat::aria()
{float a;
if(verific_figura())
{
a=(perimetru()* ((sqrt(3)/2)*l))/2;
return(a);

Coala
SDE 525.3 152 03 ME
Mod Coala Nr. document Semnat. Data 3
}
else return 0;
}
float hexagon_regulat::cerc_inscris()
{float aci,r,lci;
if(verific_figura())
{
r=(sqrt(3)/2)*l;
aci=pi*(r*r);
lci=2*pi*r;
cout<<"\nRaza cercului inscris: "<<r;
cout<<"\nAria cercului inscris: "<<aci;

}
else {return(0);}

return(lci);
}
float hexagon_regulat::cerc_circumscris()
{
float acc,R,lcc ;
if(verific_figura())
{
R=l;
acc=pi*(R*R);
lcc=2*pi*R;
cout<<"\nRaza cercului circumscris: "<<R;
cout<<"\nAria cercului circumscris: "<<acc;
}

Coala
SDE 525.3 152 03 ME
Mod Coala Nr. document Semnat. Data 3
else {return (0);}
return(lcc);
}

void hexagon_regulat::afis()
{
if(verific_figura() )
{cout<< "\nHexagonul este format cu latura: "<<l;
cout<<"\nPerimetru: "<<perimetru();
cout<<"\nAria: "<<aria();
cout<<"\
n------------------------------------------------------
-----------";
cout<<"\nDatele despre cercul inscris:" ;
cout<<"\nLungimea cercului inscris: "<<cerc_inscris();
cout<<"\
n------------------------------------------------------
-----------";
cout<<"\nDatele despre cercul circumscris:" ;
cout<<"\nLungimea cercului
circumscris:"<<cerc_circumscris();
cout<<"\
n------------------------------------------------------
-----------";

}
else{cout<<"Hexagonul nu se formaza!";}
}

Coala
SDE 525.3 152 03 ME
Mod Coala Nr. document Semnat. Data 3
void main()
{
printf("\
n--------------------------------------------");
printf("\n| Lucrarea de laborator SEMESTRUL II |");
printf("\n| Efectuat: Beleniuc Cristina
|");
printf("\n| Studenta grupei: TLC-152
|");
printf("\n--------------------------------------------\
n");
hexagon_regulat h;
cilindru c;
perimetru_ariei_laterale p ;
sfera s ;
clrscr();

h.afis();

c.aria_laterala_cilindru_circumscris();
c.aria_totala_cc();
c.aria_bazei_mari();
c.volumul_cilindru();
p.perimetru_al();

Coala
SDE 525.3 152 03 ME
Mod Coala Nr. document Semnat. Data 3
s.volum();
s.aria();
getch();

Rezultatul executiei:

Coala
SDE 525.3 152 03 ME
Mod Coala Nr. document Semnat. Data 3
Concluzia:
În urma efectuării acestei lucrări de laborator am obținut deprinderea practică de
elaborare şi depanare a programelor utilizind clase. Totodată am utilizat tehnicile de bază
prelucrarea si modificarea claselor. Efectuind laboratorul dat am obtinut deprinderi practice
ce tin de declararea claselor, prelucrarea si modificarea acestora, deasemenea la accesarea
datelor din clase. Am utilizat specificatorii de acces private și public și am observat ca cei
din private pot fi accesați numai din funcțiile membre, iar din public – din orice punct al
programului. Am folosit si operatorul :: pentru a defini un membru în afara clasei. Am
observat că clasele se aseamănă puțin cu structurile, însă sunt mai avansate și ne facilitează
lucrul în volum mare de informație.
Am observat ca cu ajutorul claselor derivate pot fi folosite una siaceiasi variabile in mai mlte
contexte,fiind o problema inainte de a „mosteni” o variabila din alta functie. Totodata am
observat mai clar efectul specificatorilor de access.
Condiția problemei presupunea ca să caclculăm mai multe date despre un corp geometric.
După rezultatele execuției vedem că toate condițiile au fost îndeplinite, iar rezultate sunt
corespunzătoare cerințelor. Astfel in cursul acestui laborator am aplicat in practica
cunostintele privind clase, dar și instrucțiuni și procedee utilizate anterior.

Coala
SDE 525.3 152 03 ME
Mod Coala Nr. document Semnat. Data 3

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