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.3
Varianta:8
Tema:” Supraincarcarea funcțiilor și a operatorilor, funcții prietene.”

Diciplina:,,Programarea Orientata pe Obiecte”

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

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

2019
Scopul lucrării:

Sarcina Lucrarii:
a. Să se creeze clasa Stack – stivă, utilizînd memoria dinamică. Să se definească operatorul
ca metode ale clasei: "+" – de adunare a două stive, Să se definească operatorul de
comparare: "!=" comparare a două stive, ca funcţie prietenă. Clasa trebuie să fie absolut
funcţională, adică să conţină toţi constructorii necesari şi destructorul. Realizați
supaăncărcarea funcției realizînd operații saupra datelor din clasă.

a) Codul Programului:
#include <iostream>

#include <time.h>

#include <stdio.h>

struct node {

int data;

node *next;

};

class Stack {

private:

node *top;

public:

Stack();

~Stack();

void push(int data);

void pop();

void disp();

bool isEmpty();

Stack operator + (const Stack &a);

friend bool operator != (Stack &a, Stack &b);

};

Stack::Stack(){
}

Stack::~Stack() {

while(top != nullptr)

node *temp = top;

top = top->next;

delete temp;

Stack Stack::operator + (const Stack &a) {

return Stack();

bool operator!=(Stack &a, Stack &b) {

bool checker = true;

node *bTemp = b.top, *aTemp = a.top;

while (aTemp != nullptr) {

if (bTemp->data == aTemp->data) {

bTemp = bTemp->next;

aTemp = aTemp->next;

} else {

checker = false;

break;

if (checker == true)

return false;

else
return true;

void Stack::push(int data) {

node *temp;

temp = new node;

temp->data = data;

temp->next = top;

top = temp;

void Stack::pop() {

if(top != nullptr)

node *temp = top;

top = top->next;

delete temp;

else

std::cout << "Stiva goala";

void Stack::disp() {

node *temp = top;

while(temp != nullptr)

std::cout << temp->data<<" ";

temp = temp->next;

}
bool Stack::isEmpty() {

return top == nullptr;

int main() {

Stack list1, list2;

time_t t;

srand((unsigned) time(&t));

for (int i = 0; i < 5; ++i) {

list1.push(rand()%100-10);

list2.push(rand()%100-10);

// list1.push(i);

// list2.push(i);

list1.disp();

std::cout << "\n";

list2.disp();

bool lol = list1 != list2;

std::cout << "\n" << lol << std::endl;

list1.disp();

return 0;

Rezultatul Programului:
Concluzie:

 In rezultatul elaborarii lucrarii date s-a pus baza aplicarii in practica a cunostintelor teoretice
referitoare la utilizarea operatorilor.
 Astfel se poate judeca despre posibilitatile largi acordate de limbajul C++ referitor la
manipularea memoriei in directia dorita de utilizator.