Sunteți pe pagina 1din 6

Ministerul Educaţiei ,Culturii și Cercetării al Republicii Moldova

Universitatea Tehnică a Moldovei


Facultatea Calculatoare,Informatică și Microelectronică
Departamentul Informatică și Ingineria Sistemelor

RAPORT
Lucrarea de laborator Nr.6
Varianta:8
Tema:” Polimorfism. Funcţii virtuale”

Diciplina:,,Programarea Orientata pe Obiecte”

A efectuat: st. gr.MN-181 Moraru Cristian

A verificat: dr., conf.univ. Osovschi Mariana

2019
Scopul lucrării:
 Studierea polimorfismului;
 Studierea principiilor legăturii întîrziate;
 Studierea funcţiilor virtuale;
 Polimorfismul ad-hoc;
 Realizarea funcţiilor virtuale;
 Studierea claselor abstracte.

Sarcina Lucrarii:
Creaţi clasa abstractă de bază Figure cu funcţia virtuală - aria. Square, Circle, Triangle, Trapeze
în care funcţia dată este predefinită. În funcţia main determinaţi masivul de pointeri la clasa
abstractă, cărei i se atribuie adresele obiectelor claselor derivate. Aria trapezului: S=(a+b)h/2.

Codul Programului:
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <math.h>
#define PI 3.14159265
using namespace std;

class Figure{
public:
virtual void arie(){}; };

class patrat:public Figure{


double l; //lungimea laturei
public:
patrat():l(0){};
patrat(double l):l(l){};
~patrat(){l=0;};
void arie(){
double temp;
temp=l*4;
cout<<"Aria patratului este= "<<temp;
return;
};
};

class cerc:public Figure{


double r; // raza cercului
public:
cerc():r(0){};
cerc(double r):r(r){};
~cerc(){r=0;};
void arie(){
double temp;
temp=PI*(pow(r,2));
cout<<"Aria cercului este= "<<temp;
return;
};
};

class triunghi:public Figure{


double a,b,c;
public:
triunghi():a(0),b(0),c(0){};
triunghi(double a,double b,double c):a(a),b(b),c(c){};
~triunghi(){a=0; b=0; c=0;};
void arie(); };
void triunghi::arie(){
double p,A;
p=(a+b+c)/2;
A=sqrt(p*(p-a)*(p-b)*(p-c));
cout<<"Aria Triunghiului este= "<<A;
return ;
};

class trapez:public Figure{


double B,b,h;
public:
trapez(){B=0; b=0; h=0;};
trapez(double B,double b,double h):B(B),b(b),h(h){};
~trapez(){B=0; b=0; h=0;};
void arie(); };
void trapez::arie(){
double temp;
temp=(h*(b+B))/2;
cout<<"Aria Trapezului este= "<<temp;
return ;
};
int main(){
Figure *x[4];
sus:
cout<<"1 - Patrat"<<endl;
cout<<"2 - Cerc"<<endl;
cout<<"3 - Triunghi"<<endl;
cout<<"4 - Trapez"<<endl;
cout<<"Esc - Iesire"<<endl;
switch (getch()) {
case '1':{ double l;
cout<<"Introdu latura patratului: ";
cin>>l;
patrat P(l);
x[0]=&P;
x[0]->arie(); break;};
case '2':{ double r;
cout<<"Introdu raza cercului: ";
cin>>r;
cerc C(r);
x[1]=&C;
x[1]->arie(); break;};
case '3':{ double a,b,c;
cout<<"Introdu laturile triunghiului..."<<endl;
cout<<"A= "; cin>>a;
cout<<"B= "; cin>>b;
cout<<"C= "; cin>>c;
triunghi T(a,b,c);
x[2]=&T;
x[2]->arie();
break;};
case '4':{ double B,b,h;
cout<<"Introdu Baza mare: "; cin>>B;
cout<<"Introdu Baza mica: "; cin>>b;
cout<<"Introdu h= "; cin>>h;
trapez Tr(B,b,h);
x[3]=&Tr;
x[3]->arie();
break;};
case 27:{ for (int i=0; i<5; i++){
if (x[i]==NULL)
delete x[i]; }
exit(1);};
}
getch();goto sus;}
Rezultatul Programului:

Concluzie:

 In rezultatul elaborarii lucrarii date s-a pus baza aplicarii in practica a cunostintelor
teoretice referitoare OOP, Polimorfizm si functii virtuale.
 Astfel se poate judeca despre posibilitatile largi acordate de limbajul C++ referitor la
manipularea claselor.

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