Sunteți pe pagina 1din 17

Ministerul Educaiei al Republicii Moldova

Universitatea Tehnic a Moldovei

Catedra: Automatica i Tehnologii Informaionale

RAPORT
Lucrare de laborator Nr.3
la Programarea in Limbajul C++

A efectuat:
A verificat:

LUCRARE DE LABORATOR NR.

Tema: Suprancrcarea operatorilor


Scopul lucrrii:
Studierea necesitii suprancrcrii operatorilor;
Studierea sintaxei de definire a operatorilor;
Studierea tipurilor de operatori;
Studierea formelor de suprancrcare;
Noiuni de baz
Avantajul utilizrii operatorilor (reducerea codului) n acelai timp complic nelegerea
codului, deoarece nu este posibil ntotdeauna sau este complicat s se urmreasc dac se
utilizeaz un operator predefinit sau suprancrcat. ns suprancrcarea operatorilor este
necesar. Sunt probleme care se soluioneaz numai prin suprancrcarea operatorilor,cum ar fi
operatorul de atribuire. Desigur

Varianta 4
) S se creeze clasa Date data, care conine cmpurile: ziua, luna, anul. S se defineasc
operatorii "+" i "-" ca metode ale clasei, iar operatorii "++" i "--" n ambele variante(prefix i
postfix) ca funcii prietene. Operatorul "+" trebuie s permit realizarea operaiilor numai cu
variabilele de tip predefinit int (x=y+5). De prevzut prelucrarea corect a anilor biseci.
Textul Programului:
#include <iostream>
#include <stdlib.h>
#include <conio.h>
#include <iomanip>
using namespace std;
class Date
{
int day,year,month;
public:
Date();
Date(int,int,int);
Date(const Date&);
~Date();
Date& operator + (int);
Date& operator - (int);
friend Date& operator ++ (Date&); //Prefix ++

friend Date operator ++ (Date&, int); //Postfix ++


friend Date& operator -- (Date&);
friend Date operator -- (Date&, int);
friend istream& operator >> (istream&, Date&);
friend ostream& operator << (ostream&, Date&);
};
Date::Date():day(0),month(0),year(0){};
Date::Date(int day, int month, int year)
{
this->day=day;
this->month=month;
this->year=year;
}
Date::Date(const Date &obj)
{
day=obj.day;
month=obj.month;
year=obj.year;
}
Date::~Date()
{
day=0;
month=0;
year=0;
}
Date& Date::operator + (int add)
{
this->day=day+add;
this->year=year+add;
this->month=month;
if(this->month == 1)
{
this->month=month+add;
if(this->day > 31) { this->day=day-add; }
if(this->month > 12) { this->month=month-add; }

}
this->month=month;
if(this->month == 2)
{
this->month=month+add;
if(this->day == 29) { this->day=day-add; this->day=day+add; }
else if(this->day > 28) { this->day=day-add; }
if(this->month > 12) { this->month=month-add; }
}
this->month=month;
if(this->month == 3)
{
this->month=month+add;
if(this->day > 31) { this->day=day-add; }
if(this->month > 12) { this->month=month-add; }
}
this->month=month;
if(this->month == 4)
{
this->month=month+add;
if(this->day > 30) { this->day=day-add; }
if(this->month > 12) { this->month=month-add; }
}
this->month=month;
if(this->month == 5)
{
this->month=month+add;
if(this->day > 31) { this->day=day-add; }
if(this->month > 12) { this->month=month-add; }
}
this->month=month;
if(this->month == 6)
{
this->month=month+add;
if(this->day > 30) { this->day=day-add; }
if(this->month > 12) { this->month=month-add; }

}
this->month=month;
if(this->month == 7)
{
this->month=month+add;
if(this->day > 31) { this->day=day-add; }
if(this->month > 12) { this->month=month-add; }
}
this->month=month;
if(this->month == 8)
{
this->month=month+add;
if(this->day > 31) { this->day=day-add; }
if(this->month > 12) { this->month=month-add; }
}
this->month=month;
if(this->month == 9)
{
this->month=month+add;
if(this->day > 30) { this->day=day-add; }
if(this->month > 12) { this->month=month-add; }
}
this->month=month;
if(this->month == 10)
{
this->month=month+add;
if(this->day > 31) { this->day=day-add; }
if(this->month > 12) { this->month=month-add; }
}
this->month=month;
if(this->month == 11)
{
this->month=month+add;
if(this->day > 30) { this->day=day-add; }
if(this->month > 12) { this->month=month-add; }

}
this->month=month;
if(this->month == 31)
{
this->month=month+add;
if(this->day > 31) { this->day=day-add; }
if(this->month > 12) { this->month=month-add; }
}
return *this;
}
Date& Date::operator - (int add)
{
this->day=day-add;
this->year=year-add;
this->month=month-add;
if(this->day < 0) { this->day=day+add; }
if(this->month < 0) { this->month=month+add; }
if(this->year < 0) { this->year=year+year; }
return *this;
}
//Prefix++
Date& operator ++ (Date& obj)
{
++obj.day;
++obj.month;
++obj.year;
return obj;
}
//Postfix ++
Date operator ++ (Date& obj, int in)
{ Date copy_(obj);
obj.day++;
obj.month++;
obj.year++;
return copy_;
}

//Prefix -Date& operator -- (Date& obj)


{
--obj.day;
--obj.month;
--obj.year;
return obj;
}
//Postfix -Date operator -- (Date& obj,int var)
{ Date copy_(obj);
obj.day--;
obj.month--;
obj.year--;
return copy_;
}
istream& operator >> (istream& in,Date& obj)
{
cout<<"Data: "; in >> obj.day;
if(!(obj.day > 0 && obj.day < 31)) { cout<<"Eroare!"; return in; }
cout<<"Luna:"; in >> obj.month;
if(!(obj.month > 0 && obj.month < 12)) { cout<<"Eroare!"; return in; }
cout<<"An:"; in >> obj.year;
if(!(obj.year > 0)) { cout<<"Eroare!"; return in; }
return in;
}
ostream& operator << (ostream& out, Date& obj)
{
out<<obj.day<<"."<<obj.month<<"."<<obj.year;
}
int main()
{
int k=1;
Date one, two, res1, res2;
while(k)
{
system("cls");
cout<<"[1]Introduceti data ";

cout<<"\n[2]Afisarea datei ";


cout<<"\n[3]Modificati data prin adunare";
cout<<"\n[4]Modificati data prin scadere";
cout<<"\n[5]Data++";
cout<<"\n[6]Data--";
cout<<"\n[0]Iesire";
cout<<"\n\nOptiunea:";
int op;
cin>>op;
switch(op)
{
default: k=1;
case 0: system("cls");
exit(0);
case 1: system("cls");
cout<<"Introduceti:\n";
cin>>one;
cout<<"\nData:"<<one;
getch();
break;
case 2: system("cls");
cout<<"Data:"<<one;
getch();
break;
case 3: system("cls");
cout<<"Data:"<<one;
res1=one+5;
cout<<"\nDupa adunare:"<<res1;
getch();
break;
case 4: system("cls");
cout<<"Data:"<<one;
res1=one-5;
cout<<"\nDupa scadere:"<<res1;
getch();
break;
case 5: system("cls");
cout<<one;

/*cout<<"\n\nPrefix increment >> "<<one++;*/


cout<<"\nIncrement:"<<++one;
getch();
break;
case 6: system("cls");
cout<<one;
cout<<"\nDecrement:"<<--one;
/*cout<<"\n\nPostfix decrement >> "<<one--;*/
getch();
break;
}
}
return 0;
}

b) S se creeze clasa List coad. S se defineasc operatorii "+" de adunare a listelor, "=" de
atribuire ca metode ale clasei. S se defineasc operatorii de comparare "==", "!=", "<", ">" ca
funcii prietene. S se suprancarce operatorii "<<" i ">>" pentru ieiri/intrri de obiecte,
precum i pentru inserarea/eliminarea elementelor n/din coad. Clasa trebuie s fie absolut
funcional, adic s conin toi constructorii necesari i destructorul. Pentru simplificarea
lucrului s se utilizeze clasa sau structura ListItem pentru reprezentarea elementelor listei spre
care refer List.
Textul Programului:
#include <iostream>
#include <stdlib.h>
#include <conio.h>
using namespace std;
class Queue
{
private:
struct element
{
int var;
element *next;
};
element *head;
element *tail;
int nr;
public:
Queue()
{
head=tail=NULL;
nr=0;
};
~Queue();
void add_el(int);
void del_el();
int if_head() { if(if_empty()) cout<<"Eroare"; return head->var; }
int if_tail() { if(if_empty()) cout<<"Eroare"; return tail->var; }
int nr_el() const {return nr;};
bool if_empty() { return head==NULL;}
Queue& operator + (int);
Queue& operator = (Queue&);

friend int operator==(const Queue&,const Queue&);


friend int operator!=(const Queue&,const Queue&);
friend int operator<(const Queue&,const Queue&);
friend int operator>(const Queue&,const Queue&);
friend ostream& operator<<(ostream&, Queue&);
friend istream& operator>>(istream&, Queue&);

};
Queue::~Queue()
{
while(head != NULL)
{
element *el=head;
head=head->next;
delete el;
}
}
void Queue::add_el(int obj)
{
if(if_empty())
{
head=new element;
head->var=obj;
head->next=NULL;
tail=head;
nr=1;
}
else
{
element *el= new element;
el->var=obj;
el->next=NULL;
tail->next=el;
tail=el;
++nr;
}
}
void Queue::del_el()
{
if(if_empty()) { cout<<"No queue!!!";}

element *el= head;


head = head->next;
delete el;
--nr;
}
Queue& Queue::operator + (int n)
{
Queue temp;
while(!this->if_empty())
{
temp.add_el(this->if_head()+n);
this->del_el();
}
while(!temp.if_empty())
{
this->add_el(temp.if_head());
temp.del_el();
}
return *this;
}
Queue& Queue::operator=(Queue& obj){
Queue temp,temp2;
while(!obj.if_empty())
{
temp.add_el(obj.if_head());
temp2.add_el(obj.if_head());
obj.del_el();
}
while(!this->if_empty())
{
this->del_el();
}
while(!temp.if_empty())
{
this->add_el(temp.if_head());
temp.del_el();
}
while(!temp2.if_empty())
{
obj.add_el(temp2.if_head());
temp2.del_el();
}
return *this;

}
int operator==(Queue& obj1,Queue& obj2){
if(obj1.nr_el()==obj2.nr_el()) { cout<<"Sunt egale! "; return 1;}
else { cout<<"Nu sunt egale "; return 0;}
}
int operator!=(Queue&obj1,Queue&obj2){
if(obj1.nr_el()!=obj2.nr_el()){ cout<<"Nu sunt egale "; return 1;}
else { cout<<"Sunt egale "; return 0;}
}
int operator<(Queue&obj1,Queue&obj2){
if(obj1.nr_el()<obj2.nr_el()){ cout<<"Prima lista este mai mica "; return 1;}
else { cout<<"A 2-a lista este mai mare"; return 0;}
}
int operator>(Queue&obj1,Queue&obj2){
if(obj1.nr_el()>obj2.nr_el()){ cout<<"Prima lista este mai mare "; return 1;}
else { cout<<"A 2-a lista este mai mica"; return 0;}
}
ostream& operator<<(ostream& out, Queue& obj)
{
Queue temp;
while (!obj.if_empty())
{
out << obj.if_head() << ' ';
temp.add_el(obj.if_head());
obj.del_el();
}
while (!temp.if_empty()){
obj.add_el(temp.if_head());
temp.del_el();
}
return out;
}
istream& operator>>(istream& in, Queue& obj)
{
int ob,n;
cout<<"Introduceti nr.de elemente a listei:";
in>>n;
cout<<"Introduceti lista:\n";
for(int i = 1; i <= n; i++){
cout<<"["<<i<<"]=";

in>>ob;
obj.add_el(ob);
}
return in;
}
int main()
{
Queue el1,el2,el3;
int k, op;
while(k=1)
{
system("cls");
cout<<"[1]Introducerea datelor primei liste";
cout<<"\n[2]Introducerea datelor a 2-a liste";
cout<<"\n[3]Afisarea listei";
cout<<"\n[4]Adunarea listei";
cout<<"\n[5]Comparare < ";
cout<<"\n[6]Comparare > ";
cout<<"\n[7]Operatia ==";
cout<<"\n[8]Atribuirea";
cout<<"\n\nComanda: ";
cin>>op;
switch(op)
{
case 0: system("cls");
getch(); exit(0);
case 1: system("cls");
cin>>el1;
getch();
break;
case 2: system("cls");
cin>>el2;
getch();
break;
case 3: system("cls");
cout<<"Prima lista:";
cout<<el1;

cout<<"\nA 2-a lista:";


cout<<el2;
getch();
break;
case 4: system("cls");
cout<<"Prima lista +10:";
cout<<el1+10;
cout<<"\n\nA 2-a lista +15:";
cout<<el2+15;
getch();
break;
case 5: system("cls");
cout<<(el1<el2);
getch();
break;
case 6: system("cls");
cout<<(el1>el2);
getch();
break;
case 7: system("cls");
cout<<(el1==el2);
getch();
break;
case 8: system("cls");
cout<<(el1=el2);
getch();
break;
default: k=1;
}
}

return 0;
}

Concluzie
In lucrarea data am obtinut deprinderi practice de utilizare functiilor de supraincarcarea
operatorilor. Am aflat ce operatori trebuie de supraincarcat si ce operatori nu se
recomanda de supraincarcat .Au fost obtinute cunostinte noi in limbajul de programare
C++ si anume supraincarcarea operatorilor si necesitatea lor.

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

  • C++2012 Lab6
    C++2012 Lab6
    Document10 pagini
    C++2012 Lab6
    Elena Bujor
    Încă nu există evaluări
  • Lab 4 Cazacu POO
    Lab 4 Cazacu POO
    Document8 pagini
    Lab 4 Cazacu POO
    Iura Cazacu
    Încă nu există evaluări
  • Rezolvare Subiect SDD Pana La 5
    Rezolvare Subiect SDD Pana La 5
    Document5 pagini
    Rezolvare Subiect SDD Pana La 5
    Lucian Petcu
    Încă nu există evaluări
  • Lab 5 PC
    Lab 5 PC
    Document3 pagini
    Lab 5 PC
    ПарасийАлекс
    Încă nu există evaluări
  • Laborator 3 PI-2020
    Laborator 3 PI-2020
    Document4 pagini
    Laborator 3 PI-2020
    Sandu Zastavnetchi
    Încă nu există evaluări
  • Lab 2 MMC Boj
    Lab 2 MMC Boj
    Document12 pagini
    Lab 2 MMC Boj
    Andrian Brinzan
    Încă nu există evaluări
  • APA - Lab2 GS
    APA - Lab2 GS
    Document18 pagini
    APA - Lab2 GS
    Unknown Person
    Încă nu există evaluări
  • Lucrare de Laborator nr.5
    Lucrare de Laborator nr.5
    Document25 pagini
    Lucrare de Laborator nr.5
    Dan Efros
    100% (1)
  • Lucrare de Laborator nr.2.
    Lucrare de Laborator nr.2.
    Document8 pagini
    Lucrare de Laborator nr.2.
    ionperu
    100% (2)
  • MMC Lab2
    MMC Lab2
    Document6 pagini
    MMC Lab2
    Mihail Boran
    Încă nu există evaluări
  • Laborator Porgramarea Calculatoarelor 3
    Laborator Porgramarea Calculatoarelor 3
    Document3 pagini
    Laborator Porgramarea Calculatoarelor 3
    Sergiu Lungu
    Încă nu există evaluări
  • Laborator 1 C
    Laborator 1 C
    Document17 pagini
    Laborator 1 C
    Dorin Graur
    Încă nu există evaluări
  • SDAlab 6
    SDAlab 6
    Document1 pagină
    SDAlab 6
    Витёк Мужичёк
    Încă nu există evaluări
  • Laborator 2 PI-2020
    Laborator 2 PI-2020
    Document2 pagini
    Laborator 2 PI-2020
    Sandu Zastavnetchi
    Încă nu există evaluări
  • Lab1 Po
    Lab1 Po
    Document7 pagini
    Lab1 Po
    Alina Axenti
    Încă nu există evaluări
  • Co1
    Co1
    Document5 pagini
    Co1
    I LOVE ME
    Încă nu există evaluări
  • GH Pavel - Lab3
    GH Pavel - Lab3
    Document7 pagini
    GH Pavel - Lab3
    Vladislav Cigolea
    Încă nu există evaluări
  • Matematica Speciala - Odt
    Matematica Speciala - Odt
    Document5 pagini
    Matematica Speciala - Odt
    Trifan Petru
    Încă nu există evaluări
  • Laborator 4 Matematici Discrete
    Laborator 4 Matematici Discrete
    Document9 pagini
    Laborator 4 Matematici Discrete
    Catalin
    Încă nu există evaluări
  • Lab.4 FC
    Lab.4 FC
    Document6 pagini
    Lab.4 FC
    Cristina Florea
    Încă nu există evaluări
  • Lucrare de Laborator NR.1 LFC
    Lucrare de Laborator NR.1 LFC
    Document10 pagini
    Lucrare de Laborator NR.1 LFC
    John Smith
    Încă nu există evaluări
  • Lab1 Apa
    Lab1 Apa
    Document15 pagini
    Lab1 Apa
    SlavicCaldare
    Încă nu există evaluări
  • Laboratorul 7 PC
    Laboratorul 7 PC
    Document36 pagini
    Laboratorul 7 PC
    Petrea Trofim
    Încă nu există evaluări
  • Lucrare de Curs LFPC
    Lucrare de Curs LFPC
    Document19 pagini
    Lucrare de Curs LFPC
    Cristik95
    100% (1)
  • Lab3 SDA UTM 2014
    Lab3 SDA UTM 2014
    Document13 pagini
    Lab3 SDA UTM 2014
    Artur Spatari
    Încă nu există evaluări
  • Laborator-2mmc Balan Ion
    Laborator-2mmc Balan Ion
    Document12 pagini
    Laborator-2mmc Balan Ion
    Ion Bn
    Încă nu există evaluări
  • Lab 4
    Lab 4
    Document5 pagini
    Lab 4
    cristian
    Încă nu există evaluări
  • LP-NR 4
    LP-NR 4
    Document6 pagini
    LP-NR 4
    Dutcovici Radu
    100% (1)
  • Lab7 POO
    Lab7 POO
    Document10 pagini
    Lab7 POO
    Grosu Elena
    Încă nu există evaluări
  • Cls 9 C++ Intensiv (NR 2) - Partea A IV-a Instructiuni C++
    Cls 9 C++ Intensiv (NR 2) - Partea A IV-a Instructiuni C++
    Document87 pagini
    Cls 9 C++ Intensiv (NR 2) - Partea A IV-a Instructiuni C++
    Ionut Oprea
    Încă nu există evaluări
  • PC Raport 6 7.odt
    PC Raport 6 7.odt
    Document16 pagini
    PC Raport 6 7.odt
    Trifan Petru
    Încă nu există evaluări
  • Subiecte Oracle Rezolvate
    Subiecte Oracle Rezolvate
    Document6 pagini
    Subiecte Oracle Rezolvate
    Gabriel Bădărău
    Încă nu există evaluări
  • POO Lab7
    POO Lab7
    Document6 pagini
    POO Lab7
    Dani Ela
    Încă nu există evaluări
  • Lab 1
    Lab 1
    Document10 pagini
    Lab 1
    Ion Cornea
    Încă nu există evaluări
  • Lucrarea de Laborator NR 5 1
    Lucrarea de Laborator NR 5 1
    Document12 pagini
    Lucrarea de Laborator NR 5 1
    Adrian Cioresco
    Încă nu există evaluări
  • Lab 6
    Lab 6
    Document4 pagini
    Lab 6
    Егор Казаков
    Încă nu există evaluări
  • Laborator 9
    Laborator 9
    Document8 pagini
    Laborator 9
    Gabriel Braileanu
    Încă nu există evaluări
  • Raport Programarea Calculatoarelor 5
    Raport Programarea Calculatoarelor 5
    Document14 pagini
    Raport Programarea Calculatoarelor 5
    Oprea Cristian
    Încă nu există evaluări
  • Sofroni Maxim Ai-211 MN Lab3
    Sofroni Maxim Ai-211 MN Lab3
    Document7 pagini
    Sofroni Maxim Ai-211 MN Lab3
    Максим Софрони
    Încă nu există evaluări
  • Lab 6 Poo
    Lab 6 Poo
    Document5 pagini
    Lab 6 Poo
    Alex Tronciu
    Încă nu există evaluări
  • Raport GC Lab 1
    Raport GC Lab 1
    Document6 pagini
    Raport GC Lab 1
    Nickolae Enachi
    Încă nu există evaluări
  • Lab 4
    Lab 4
    Document7 pagini
    Lab 4
    GabrielaTulbu
    Încă nu există evaluări
  • AlexeTudorStefan Lab04
    AlexeTudorStefan Lab04
    Document9 pagini
    AlexeTudorStefan Lab04
    Ovidiu Moldovan
    Încă nu există evaluări
  • Lab 1
    Lab 1
    Document10 pagini
    Lab 1
    rosca9doinita
    Încă nu există evaluări
  • Lab2 MN CR-212 V14
    Lab2 MN CR-212 V14
    Document8 pagini
    Lab2 MN CR-212 V14
    Tabureanu Marian
    Încă nu există evaluări
  • Lab 4 PC UTM FCIM TI
    Lab 4 PC UTM FCIM TI
    Document10 pagini
    Lab 4 PC UTM FCIM TI
    Adrian Chiforiuc
    Încă nu există evaluări
  • Grafica Laborator Nr.3
    Grafica Laborator Nr.3
    Document5 pagini
    Grafica Laborator Nr.3
    Cebotari Ion
    100% (2)
  • Laboratoare OpenGL
    Laboratoare OpenGL
    Document35 pagini
    Laboratoare OpenGL
    Coldea Ilie
    Încă nu există evaluări
  • Algoritmul Lui Kruskal
    Algoritmul Lui Kruskal
    Document22 pagini
    Algoritmul Lui Kruskal
    Sorin Andrei
    Încă nu există evaluări
  • Lab10 11 - CR 192PaduraruVadim
    Lab10 11 - CR 192PaduraruVadim
    Document34 pagini
    Lab10 11 - CR 192PaduraruVadim
    Vadim Paduraru
    Încă nu există evaluări
  • LFA - Indrumar Aplicatii
    LFA - Indrumar Aplicatii
    Document48 pagini
    LFA - Indrumar Aplicatii
    Adrian Tudor
    Încă nu există evaluări
  • Metoda Postfixata
    Metoda Postfixata
    Document31 pagini
    Metoda Postfixata
    emy3999
    Încă nu există evaluări
  • Laborator 2 APA
    Laborator 2 APA
    Document17 pagini
    Laborator 2 APA
    RoscaFlorin
    Încă nu există evaluări
  • MMC Lab3 Rap
    MMC Lab3 Rap
    Document4 pagini
    MMC Lab3 Rap
    I LOVE ME
    Încă nu există evaluări
  • Metode Numerice
    Metode Numerice
    Document4 pagini
    Metode Numerice
    Vladik Suman
    Încă nu există evaluări
  • Lab 2 LFA
    Lab 2 LFA
    Document7 pagini
    Lab 2 LFA
    Artur Kingsman
    Încă nu există evaluări
  • Raport 3
    Raport 3
    Document11 pagini
    Raport 3
    Damean Alexandra
    100% (1)
  • Laborator Programare Avansata
    Laborator Programare Avansata
    Document7 pagini
    Laborator Programare Avansata
    romamd555s
    Încă nu există evaluări
  • Tutunaru Poo Lab 3
    Tutunaru Poo Lab 3
    Document9 pagini
    Tutunaru Poo Lab 3
    Dascal Sergiu
    Încă nu există evaluări
  • Lab 3
    Lab 3
    Document13 pagini
    Lab 3
    Витёк Мужичёк
    100% (1)