Documente Academic
Documente Profesional
Documente Cultură
Chişinău-2016
Problema 1
Să se creeze clasa Date – data, care conţine cîmpurile: ziua, luna, anul. Să se definească operatorii "+" şi
"-" ca metode ale clasei, iar operatorii "++" şi "--" în ambele variante(prefixă şi postfixă) ca funcţii
prietene. Operatorul "+" trebuie să permită realizarea operaţiilor numai cu variabilele de tip predefinit int
(x=y+5).
Problema 2 :
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 funcţii prietene. Să se
supraîncarce operatorii "<<" şi ">>" pentru ieşiri/intrări de obiecte, precum şi pentru inserarea/eliminarea
elementelor în/din coadă. Clasa trebuie să fie absolut funcţională, adică să conţină toţi constructorii
necesari şi destructorul. Pentru simplificarea lucrului să se utilizeze clasa sau structura ListItem pentru
reprezentarea elementelor listei spre care referă List.
1. Codul sursa :
#include<iostream>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
public:
Date() //constr.implicit
{
day=0;
month=0;
year=0;
};
Date(Date &d) //constr.copie
{
this->day=d.day;
this->month=d.month;
this->year=d.year;
};
Date(int d,int m,int y) //constr. general
{
day=d;
month=m;
year=y;
};
~Date(){}; //destructor
Date operator+(Date &s) // supraincarcarea operatorului + ca metoda a clasei
{
Date res;
res.day=this->day+s.day; // suma zilelor obiectului curent +
obiectul ca parametru
res.month=this->month+s.month;
res.year=this->year+s.year;
return res;
};
Date operator-(Date &d)
{
Date dif;
dif.day=this->day-d.day;
dif.month=this->month-d.month;
dif.year=this->year-d.year;
return dif;
};
friend Date& operator++(Date& pr); // metode prietene - ca sa aiba acces
la datele private ale obiectului
friend Date operator++(Date& post,int);
friend Date& operator--(Date& dec);
friend Date operator--(Date& post,int);
void print()
{
cout<<endl<<"Le jour "<<day;
cout<<endl<<"Le mois "<<month;
cout<<endl<<"L'annee "<<year<<endl;
}
};
Date& operator++(Date& pr)
{
Date pre; // preincrementarea
pr.day++;
pr.month++;
pr.year++;
pre.day=pr.day;
pre.month=pr.month;
pre.year=pr.year;
return pre;
}
Date operator++(Date& post,int)
{
Date st; // posincrementarea
st.day=post.day;
st.month=post.month;
st.year=post.year;
post.day++;
post.month++;
post.year++;
return st;
}
Date& operator--(Date& dec)
{
Date decr;
dec.day--;
dec.month--;
dec.year--;
decr.day=dec.day;
decr.month=dec.month;
decr.year=dec.year;
return decr;
}
Date operator--(Date& post,int)
{
Date st;
st.day=post.day;
st.month=post.month;
st.year=post.year;
post.day--;
post.month--;
post.year--;
return st;
int main()
{
Date data1(10,11,2010),data2(data1),data3(5,1,3),data4();// am construit obiecte de tip date ;
int d=2,d2=1;
cout<<endl<<"Voila l'objet data2(l'objet de travail):";
data2.print();
getch();
cout<<endl<<"Voila l'objet data3:";
data3.print();
getch();
cout<<endl<<"La somme de deux objets de type Date:";
data2=data1+data3;
data2.print();
getch();
cout<<endl<<"La differece de deux objets de type Date:";
data2=data1-data3;
data2.print();
getch();
cout<<endl<<"L'operateur '++' prefix:";
++data2;
data2.print();
getch();
cout<<endl<<"L'operateur '++'postfix:(avant et apres l'incrementation)";
data2++.print();
data2.print();
getch();
cout<<endl<<"L'operateur '--' prefix:";
--data2;
data2.print();
getch();
cout<<endl<<"L'operateur '--'postfix(avant et apres la decrementation)";
data2--.print();
data2.print();
getch();
return 0;
}
Rezultatele compilarii :
Afisarea datelor initiale si in urma prelucrarilor:
2. Codul sursa :
#include <iostream>
#include <sstream>
class Node {
public:
int data;
Node *link;
};
using namespace std;
class Set {
private:
Node *p;
public:
Set();
friend void operator+=(Set &, int); // ca metode prietene inserarea unui element nou
bool has(int);
bool Set::has(int element) {// implementarea metodei has : verifica daca multimea curenta
contine elementul transmis ca arg
Node *q;
bool has = false;
return has;
}
int Set::size() {
Node *q;
int size = 0;
for (q = p; q != NULL; q = q->link)
size++;
return size;
}
return result;
return result;
}
if (!set.has(value)) {
if (set.p == NULL) {
set.p = new Node;
set.p->data = value;
set.p->link = NULL;
}
else {
q = set.p;
t = new Node;
t->data = value;
t->link = NULL;
q->link = t;
}
}
return out;
}
return in;
}
int main() {
Set set1, set2, result;
set1 += 10;
cout << "Add element 10 to first set" << endl;
cout << "First set : " << set1 << endl;
return 0;
}
Rezultatele compilarii:
Concluzie:
In aceasta lucrare de laborator am creat o clasa cu anumite cimpuri indicate in sarcina. Am definit
operatorii "+" şi "-" ca metode ale clasei, iar operatorii "++" şi "--" în ambele variante(prefixă şi postfixă)
ca funcţii prietene
In partea a 2 a lucrarii am creat clasa List – coadă. Am definit operatorii "+" – de adunare a listelor, "=" –
de atribuire ca metode ale clasei. Am definit operatorii de comparare "==", "!=", "<", ">" ca funcţii
prietene. Am supraîncarcat operatorii "<<" şi ">>" pentru ieşiri/intrări de obiecte, precum şi pentru
inserarea/eliminarea elementelor în/din coadă. Clasa este funcţională, conţine toţi constructorii necesari şi
destructorul.