Sunteți pe pagina 1din 12

Ministerul Educaţiei al Republicii Moldova

Universitatea Tehnică a Moldovei

RAPORT
Lucrare de laborator nr.3
la
Programarea orientată pe obiecte

A efectuat: st. gr.TI - 195


Rotaru Dan

A controlat: asistent univer.


Mititelu Vitalie

Chișinău 2020
Lucrare de laborator nr.3

Tema: Supraîncărcarea operatorilor


Varianta 1
Sarcina de lucru:
а) Să se creeze o clasă de numere întregi. Să se definească operatorii "++" şi "+", ca metode ale
clasei, iar operatorii "- -" şi "-" ca funcţii prietene. Operatorii trebuie să permită efectuarea
operaţiilor atît cu variabilele clasei date, cît şi cu variabilele întregi de tip predefinit.

b) Să se creeze o clasă Set – mulţimea numerelor întregi, utilizînd memoria dinamică. Să se


definească operatorii de lucru cu mulţimile: "+" – uniunea, "*" – intersecţia, "-" scăderea, ca
funcţii prietene, iar "+=" – înserarea unui nou element în mulţime, "==" – comparare la egalitate,
ş. a. ca metode ale clasei. Să se definească operatorii "<<" şi ">>". Să se definească funcţia de
verificare a apartenenţei unui element la o mulţime.

Listingul programului (a)

#include <iostream>
using namespace std;

class Integers{
    public: 
        int number;
        friend Integers& operator- (Integers&);
        friend Integers& operator-- (Integers&);

    Integers(){};
      //Constructor  cu parametri
    Integers(int num){
        number = num;
    }
    Integers operator +(int n){
        this->number = this->number + n;
        return *this;
    }

      //  Operator cu  parametri (incrementare)  (++p)


    Integers operator ++(){
        this->number = this->number++;
        return *this;
    }
      //  Operator cu  postincrementare (p++)
    Integers operator ++(int){
        this->number = this->number + 1;
        return *this;
    }
      //  Supraincarcarea operatorului  egal
    Integers operator = (const Integers &p){
        if(this == &p) return *this;
        number = p.number;
        return *this;
    }
    Integers operator -(int n){
        this->number = this->number - n;
        return *this;
    }

    Integers operator --(int){
        this->number = this->number - 1;
        return *this;
    }
    
    int operator +(Integers const &right){
        return number + right.number;
    }
    int operator -(Integers const &right){
        return number - right.number;
    }
};

int main(){
    Integers i, i1;
    
    cout << "Introduceti un numar: ";
    cin >> i.number;
    
    i++;
    cout << "i++ = " << i.number << "\n";

    i--;
    cout << "i-- = " << i.number << "\n";

    i+9;
    cout << "i + 9 = " << i.number << "\n";

    i-5;
    cout << "i - 5 = " << i.number << "\n\n";

    i1.number = 5;
    cout << "i1 = " << i1.number << "\n";

    i1 = i;
    cout << "i1 = i => " << i1.number << "\n";
    
    i1 = i + 10;
    cout << "i1 = i + 10 => " << i1.number << "\n";

    i1 = i - 10;
    cout << "i1 = i - 10 => " << i1.number << "\n";
    
    return 0;
}
1. Rezultatul programului (a)

2.Listingul programului (b)

#include <iostream>
#include <conio.h>
#include <stdlib.h>

using namespace std;

class Set{
    public: 
        int *arr = new int[0];
        int length;

        friend Set operator-(Set&);
        friend Set operator+(Set&, Set&);
        friend Set operator*(Set&, Set&);

      //Constructor  cu parametri  (implicit)


    Set(){
        cout << "Introduceti numarul de elemente: ";
        cin >> length;

            //Initializam  array-ul (egalam  toate elementele  cu 0)


        for(int i = 0; i < length; i++) arr[i] = 0;

        cout << "Introduceti array-ul dvs: ";
        for(int i = 0; i < length; i++) {
            int e;
            cin >> e;
            arr[i] = e;
        }
    }

      //  Adaugarea unui  nou element  in array


    Set operator +=(int n){

            //  length++;
        arr[length] = n;
        length++;
        return *this;
    }

      //comparare  la egalitate
    Set operator == (Set &right){
        int bad = 0;
        if(length != right.length) cout << "Array-urile nu sunt egale!";
        else{
            for(int i = 0; i < length; i++){
                if(arr[i] != right.arr[i]) bad = 1;
            }

            if(bad == 1) cout << "Array-urile nu sunt egale!";
            else cout << "Array-urile sunt egale!";
        }
        return *this;
    }
    
    void Afisare(){
        cout << "Array-ul dvs: [";
        for(int i = 0; i < length; i++) cout << " " << arr[i] << " ";
        cout << "]\n";
    }
    bool ElementInArray(int el){
        int i, count = 0;
        for(i = 0; i < length; i++) if(arr[i] == el) count++;
        if(count == 0) return false;
        else return true;
    }

    ostream& operator <<(ostream&out){
        cout << "Array-ul dvs: [";
        for(int i = 0; i < length; i++) cout << " " << arr[i] << " ";
        cout << "]\n";
        return out;
    }
    istream& operator >>(istream&in){
        cout << "Introduceti numarul de elemente: ";
        cin >> length;

            //Initializam  array-ul (egalam  toate elementele  cu 0)


        for(int i = 0; i < length; i++) arr[i] = 0;

        cout << "Introduceti array-ul dvs: ";
        for(int i = 0; i < length; i++) {
            int e;
            cin >> e;
            arr[i] = e;
        }
        return in;
    }

};

//Eliminarea  unui element  din array


Set operator-(Set &a){
    int i, count = 0, del;

    cout << "Care element doriti sa stergeti: ";
    cin >> del;

    for(i = 0; i < a.length; i++){
        if(a.arr[i] == del){
            for(int j = i; j < a.length - 1; j++) a.arr[j] = a.arr[j + 1];
            count++;
            break;
        }
    }
    if(count == 0){
        cout << "Elementul introdus nu exista in array-ul dvs";
    }
    else{
        cout << "Elementul dvs a fost cu success sters din array!\n";
        cout << "Array-ul dvs: [";
        for(i = 0; i < a.length - 1; i++) cout << " " << a.arr[i] << " ";
        cout << "]";
        a.length--;
    }
}

//Adaugarea  unui array  la alt  array


Set operator +(Set &a, Set &right){
    int originalLenght = a.length;
    for(int i = 0; i < right.length; i++) {
        a.arr[originalLenght + i] = right.arr[i];
        a.length++;
    }
}
//Verificarea  care elemente  din doua  array-uri corespund  (sunt egale)
Set operator *(Set &a, Set &right){
    int arrO[a.length];
    int count = 0;
    int length1 = a.length;

    for(int i = 0; i < a.length; i++) arrO[i] = 0;
    for(int i = 0; i < length1; i++){
        for(int j = 0; j < length1; j++){
            if(a.arr[i] == right.arr[j]) arrO[i] = right.arr[j];
        }
    }

      //Stergem  0
    for(int i = 0; i < length1; i++){
        if(arrO[i] == 0){
            for(int j = i; j < length1; j++) arrO[j] = a.arr[j + 1];
            count++;
            break;
        }
    }
    if(count > 0) length1--;
    

    cout << "Elementele care sunt egale: [";
    for(int i = 0; i < length1; i++) cout << " " << arrO[i] << " ";
    cout << "]";
    
}

int main(){
    Set a, a1;

    while (true) {
        system("CLS");
        cout << "Selectati item-ul dorit:" << endl;
        cout << " 1.Afisarea multimilor de elemente" << endl;
        cout << " 2.Adaugarea unui element in array-ul existent" << endl;
        cout << " 3.Eliminarea unui element din array" << endl;
        cout << " 4.Verificare daca elementul introdus exista in array" << endl;
        cout << " 5.Verificare daca doua array-uri sunt egale" << endl;
        cout << " 6.Adaugarea unui array la alt array" << endl;
        cout << " 7.Verificarea care elemente din doua array-uri corespund (sunt egal
e)" << endl;
        cout << " Esc - Iesire" << endl;
        cout << "\n>> ";
        char key = getch();
        switch (key) {
            case '1': {
                a.Afisare();
                a1.Afisare();
                getch();
                break;
            }
            case '2': {
                cout << "Introduceti elementul dorit: ";
                int n;
                cin >> n;
                a+=n;
                a.Afisare();
                getch();
                break;
            }
            case '3': {
                -a;
                getch();
                break;
            }
            case '4': {
                int n;
                cout << "Introduceti elementul dorit: ";
                cin >> n;
                if(a.ElementInArray(n)) cout << "Elementul introdus exista in array-
ul dvs!";
                else cout << "Elementul introdus nu exista in array-ul dvs!";
                getch();
                break;
            }
            case '5': {
                a==a1;
                getch();
                break;
            }
            case '6': {
                a+a1;
                a.Afisare();
                getch();
                break;
            }
            case '7': {
                a*a1;
                getch();
                break;
            }
            case 27: {
                exit(1);
            }

        }
    }

    return 0;
}

2. Rezultatul programului (b)


Introducem numărul de elemente și array-urile:

Meniul programului:

1.Afișarea mulțimilor de elemente:

2.Adăugarea unui element în array-ul existent:


3.Eliminarea unui element din array:

4.Verificare dacă elementul introdus există în array:


5.Verificare dacă două array-uri sunt egale:

6.Adăugarea unui array la alt array:

7.Verificarea care elemente din două array-uri corespund


(sunt egale):

Concluzii:
1. Verificarea ne arata ca rezultatele obtinute sunt corecte si programul lucreaza corect.
2. Au fost obtinute cunoștințe în studierea principiilor de supraîncărcare a operatorilor în C+
+, de definire şi utilizare a constructorilor și distructurilor, a constructorilor impliciți, de
copiere, citire, de conversie a tipului și constructor general.

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