Sunteți pe pagina 1din 10

Ministerul Educaţiei al Republicii Moldova

Universitatea Tehnică a Moldovei

RAPORT

Lucrarea de laborator nr.3

La Programarea orientata pe obiecte

A efectuat:

st. gr. CR-181 Patras Cristi

A verificat:

lector,univ. Oșovschi Mariana

Chişinău -2019
Tema: Supraincarcarea funcțiilor și a operatorilor, funcții prietene.

Scopul lucrării: familiarizarea studenţilor cu noţiunile: metode supraăncărcate,


operatori supraîncărcaţi funcții prietene.
Varianta 2
b) Să se creeze clasa List – coadă, utilizînd memoria dinamică. Să se definească operatorul "+" –
de adunare a listelor, ca funcţie prietenă. Să se definească operatorul de comparare "==", ca
metodă ale clasei. Realizați supaăncărcarea funcției realizînd operații saupra datelor din clasă.
Clasa trebuie să fie absolut funcţională, adică să conţină toţi constructorii necesari şi
destructorul.

#include <iostream>
#include <stdlib.h>
using namespace std;

class List
{
int n;
int *num;
public:
List(int n=0);
List(int n, int *nm);
~List();
void Print();
void SetData();
friend List operator+(const List &a,const List &b);
friend List operator+(const List &a, int value);
friend List operator+(const List &a);
int operator==(const List & a);
List& operator=(const List & a);
};

List::List(int n)
{
this->n=n;
num=new int[n];
}

List::List(int n, int *nm)


{
this->n=n;
num = new int[n];
for(int i=0; i<n; i++)
{
this->num[i]=nm[i];
}
}

List::~List()
{
delete []num;
}

void List::Print()
{
for(int i=0; i<n; i++)
{
cout << num[i] << "\t";
}
cout << endl;
}

void List::SetData()
{
cout << "Introduceti numarul de elemente pe care doriti sa le introduceti in
lista" << endl;
cin >> n;
for(int i=0; i<n; i++)
{
cout << "Introduceti valoarea : " << i+1 << endl;
cin >> num[i];
}
cout << endl;
}

int List::operator==(const List & a)


{
if(n==a.n)
{
for(int i=0;i<n;i++)
{
if(num[i]!=a.num[i])
{
return 0;
}
}
} else
{
return 0;
}
return 1;
}

List operator+(const List & a)


{
int num[a.n];
for(int i=0; i<a.n; i++)
{
num[i]=a.num[i]*2;
}
return List(a.n, num);
}

List operator+(const List & a, int value)


{
int num[a.n];
for(int i=0; i<a.n; i++)
{
num[i]=a.num[i]+value;
}
return List(a.n, num);
}

List operator+(const List &a, const List &b)


{
int num[a.n];
for(int i=0; i<a.n; i++)
{
num[i]=a.num[i]+b.num[i];
}
return List(a.n, num);
}

List& List::operator=(const List &a)


{
n=a.n;
num=new int[n];
for(int i=0; i<a.n; i++)
{
num[i]=a.num[i];
}
}

int main()
{
int n;
int A, B;
int comp;
int menu;
int aleg;
cout << "Introduceti numarul de liste pe care doriti sa le introduce-ti in
program" << endl;
cin >> n;
List * L = new List[n];
for(int i=0; i<n; i++)
{
system("cls");
cout << "Lista nr :" << i+1 << endl;
L[i].SetData();
}
do
{
system("cls");
cout << "1) Afiseaza lista(-le) "<< endl;
cout << "2) Adunarea dupa indice Listei(-lor)" << endl;
cout << "3) Compararea Listelor" << endl;
cout << "0) Exit "<< endl;
cin >> menu;
switch(menu)
{
case 1:
{
system("cls");
for(int i=0; i<n; i++)
{
cout << "Lista nr " << i+1 << endl;
L[i].Print();
cout << endl;
}
}
break;
case 2:
{
system("cls");
if(n<2)
{
cout << "Nu este posibil de accesat functia" << endl;
} else
{
system("cls");
cout << "1) Adunarea dupa indice a 2 liste" << endl;
cout << "2) Adunarea tuturor elementelor listei cu o valoare" <<
endl;
cout << "3) Adunarea listei cu ea insasi" << endl;
cin >> aleg;
switch(aleg)
{
case 1 :
{
system("cls");
cout << "Alegeti Listele care o sa participe la adunare"
<< endl;
for(int i=0; i<n; i++)
{
cout << "Lista nr " << i+1 << endl;
L[i].Print();
cout << endl;
}
cin >> A >> B;
A=A-1;
B=B-1;
system("cls");
L[A].Print();
L[B].Print();
L[A]=L[A]+L[B];
cout << "Rezultatul este : " << endl;
L[A].Print();
}
break;
case 2:
{
system("cls");
cout << "Alegeti Lista care o sa participe la adunare" <<
endl;
for(int i=0; i<n; i++)
{
cout << "Lista nr " << i+1 << endl;
L[i].Print();
cout << endl;
}
cin >> A;
A=A-1;
cout << "Alegeti elementul pentru a-l aduna la fiecare
element al Listei" << endl;
cin >> comp;
L[A]=L[A]+comp;
cout << "Rezultatul este : " << endl;
L[A].Print();
}
break;
case 3:
{
system("cls");
cout << "Alegeti Lista care o sa participe la adunare cu
ea insasi" << endl;
for(int i=0; i<n; i++)
{
cout << "Lista nr " << i+1 << endl;
L[i].Print();
cout << endl;
}
cin >> A;
A=A-1;
L[A]=(L[A]+L[A]);
cout << "Rezultatul este : " << endl;
L[A].Print();
}
break;
}
}
}
break;
case 3:
{
system("cls");
if(n<2)
{
cout << "Nu este posibil de accesat functia" << endl;
} else
{
cout << "Alegeti Listele care o sa participe la comparatie" <<
endl;
for(int i=0; i<n; i++)
{
cout << "Lista nr " << i+1 << endl;
L[i].Print();
cout << endl;
}
cin >> A >> B;
A=A-1;
B=B-1;
comp=(L[A]==L[B]);
if (comp==0)
{
cout <<"Listele sunt diferite " << endl;
}
else
{
cout << "Listele sunt identice" << endl;
}
}
}
break;
case 0:
{
//delete []L;
}
break;
}
system("pause");
}while (menu!=0);
}

1.
2.
1)

2)
3)
3.

Concluzii :

In lucrarea data am folosit operatorii pentru a compara si a se suma intre ele ,atat cat si cu alte siruri
introduse folosind functiile prieteni .Totodata am creat o functie ce permite la sfarsit de resetat primul
sir la valoarea lui initala si introducerea ceva adaugator la sir .

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