Sunteți pe pagina 1din 9

MINISTERUL EDUCAȚIEI ȘI CERCETĂRII

AL REPUBLICII MOLDOVA
Universitatea Tehnică a Moldovei
Facultatea Calculatoare, Informatică şi Microelectronică
Departamentul Microelectronică si Inginerie Biomedicală

IBM-211 Marchitan Mihail

Raport
pentru lucrarea de laborator Nr.3

la cursul de “Programarea Orientată pe Obiecte”

Verificat:
Barîmb Eusebiu, asistent universitar,
Departamentul Microelectronică si Inginerie Biomedicală,
Facultatea FCIM, UTM

Chișinău – 2022

1
CUPRINS

Scopul lucrării:..........................................................................................................................3

Sarcina lucrării:.........................................................................................................................3

Problema 1.................................................................................................................................4

Anexă........................................................................................................................................9

Concluzia:................................................................................................................................11

Bibliografia..............................................................................................................................12

2
Tema: Supraîncărcarea operatorilor
1. Scopul lucrării:
• Studierea necesităţii supraîncărcării operatorilor;
• Studierea sintaxei de definire a operatorilor;
• Studierea tipurilor de operatori;
• Studierea formelor de supraîncărcare;

1.1. Sarcina lucrării:


Varinta 8:
а) Să se creeze clasa Complex – numere complexe. Să se definească toţi operatorii dintr-un
simbol ca funcţii prietene, iar operatorii ce constau din două simboluri – ca metode ale
clasei. Excepţie – operatorul de atribuire, care poate fi numai metodă a clasei şi operatorii
pentru ieşiri/intrări de obiecte. Adunarea şi scăderea trebuie realizată atît cu numere
complexe cît şi cu tipul predefinit double.

Teoria principala

Clasa este un tip de date, similar cu struct, care conține atât câmpuri de tip dată
(numite proprietăți), cât și câmpuri de tip funcție (numite și metode). Câmpurile clasei
(proprietăți sau metode) se mai numesc membri ai clasei. Astfel avem, date
membre și funcții membre.
Obiectul reprezintă o dată de tipul clasei – de exemplu o variabilă. Declararea unei variabile
de acest tip se mai numește instanțiere a clasei. Spunem că obiectul este o instanță a clasei.
Pentru membrii unei clase (date sau metode) se precizează anumite caracteristici,
numite modificatori (specificatori) de acces, care stabilesc cum se face accesul la acestea:

 private – interzic accesul la date și metode în afara clasei;


 public – permit accesul la date și metode din afara clasei;
 protected – interzic accesul din afara clasei, dar îl permit din clasele derivate – are
sens în contextul derivării claselor.

Datele de tip Boolean pot avea valorile adevărat sau fals:

0 – pentru False

1 – pentru True

3
Codul Programului:
#include<iostream>
using namespace std;
class Complex{ public: Complex();
Complex(int x);
Complex(int x, int y);
friend Complex operator+(Complex a, Complex b);
friend Complex operator-(Complex a, Complex b);
friend Complex operator+(Complex a, double b);
friend Complex operator-(Complex a, double b);
friend Complex operator*(Complex a, Complex b);
friend Complex operator*(Complex a, double b);
friend Complex operator/(Complex a, Complex b);
Complex operator++();
Complex operator--();
bool operator == (Complex a);
void show(); private: double x, y;
};
void Complex::show(){
cout << this->x <<"+" <<this->y<<"i"<<endl;
}
Complex::Complex(){ this->x = 0; this->y = 0;
}
Complex::Complex(int x){ this->x=x; this->y=0;
}
Complex::Complex(int x, int y){ this->x=x; this->y=y;
}
Complex operator+(Complex a, Complex b){
Complex c;

4
c.x=a.x+b.x ; c.y=a.y+b.y; return(c);
}
Complex operator-(Complex a, Complex b){
Complex c;
c.x=a.x-b.x ; c.y=a.y-b.y; return(c);
}
Complex operator+(Complex a, double b){
Complex c;
c.x=a.x+b ; c.y=a.y; return(c);
}
Complex operator*(Complex a, Complex b){
Complex c;
c.x=(a.x*b.x)-(a.y*b.y);
c.y=(a.x*b.y)+(a.y*b.x); return c;
}
Complex operator*(Complex a, double b){
Complex c; c.x=a.x*b;
c.y=a.y*b; return c;
}
Complex operator/(Complex a, Complex b){
Complex c;
c.x=((a.x*b.x)+(a.y*b.y))/((b.x*b.x)+(b.y*b.y));
c.y=((b.x*a.y)-(a.x*b.y))/((b.x*b.x)+(b.y*b.y));
return c;
}
Complex Complex::operator++(){
Complex c;
c.x=this->x+1;
c.y=this->y+1; return c;

5
}
Complex Complex::operator--(){
Complex c;
c.x=this->x-1;
c.y=this->y-1; return c;
}
bool Complex::operator==(Complex a){
if((this->x == a.x)&&(this->y == a.y))
return true;
else
{
return false;
}
}
int main(void){
Complex c1,c2,c3,c4;
c1=Complex(2);
c2=Complex(3,4);
c1.show();
c2.show();
c3=c1+c2;
c3.show();
c4= c1+3.2;
c4.show();
c4=c2-c1;
c4.show();
c4=++c4;
c4.show();
if(c1 == c2){

6
cout <<"sunt egale";
}
else cout <<"c1 si c2 nu sunt egale"<<endl;
c4.show();
return 0;
}

Compilarea programului si afisarea rezultatelor:

In figura 1 are loc afisarea rezultatelor

Figura1.Afisarea

7
CONCLUZIA

În urma elaborării lucrării de laborator am am capătat cunoștințele de bază in


programarea pe obiecte si anume cu clasele și ne-am familiarizat cu supraincarcarea
operatorilor cat si aplicația constructorilor și destructorilor în limbajul C++. De asemenea am
studiat și am realizat în practică supraincarcarea operatorilor și am concluzionat
aplicabilitatea acestora în diferite situații. Am observat ca : Iata lista operatorilor din C++
care se pot supraincarca: new delete () [] + - * / % ^ & | ~ ! = < > += -= *= /= %= ^= &= |=
<< >> >>= <<= == != <= >= && || ++ -- , ->* ->.

Operatorul () este apelul unei functii, iar operatorul [] este operatorul de indexare.

Urmatorii operatori nu se pot supraincarca: . .* :: ?: sizeof.

8
BIBLIOGRAFIA
Sursa [online]. [accesat la data de 1/11/2022] Disponibil:

Supraincarcarea Functiilor- CURS DE PE ELSE, ACCESAT 31.10.2022, ORA 23


https://else.fcim.utm.md/pluginfile.php/81022/mod_resource/content/0/Supraincarcarea.pdf

Clase și funcții friend. Supraîncărcarea operatorilor - CURS DE PE ELSE, ACCESAT


31.10.2022, ORA 23
https://else.fcim.utm.md/pluginfile.php/104524/mod_resource/content/0/Curs%2004%20-
%20Clase%20si%20functii%20friend.%20Supraincarea%20operatorilor.pdf

Clase si obiecte- CURS DE PE ELSE, ACCESAT 31.10.2022, ORA 23


https://else.fcim.utm.md/pluginfile.php/46503/mod_resource/content/1/PC7_POO3.pdf

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