You are on page 1of 4

#include<map>

#include<conio.h>
#include<iostream>
#include<fstream>
using namespace std;

class Auto
{
private:
float pret;
public:
int idAuto;
char marca[30];
Auto()
{
idAuto = 1000;
strcpy(marca, "Dacia");
pret = 3000;
}

Auto(int idA, char m[30], float p)


{
this->idAuto = idA;
strcpy(this->marca, m);
this->pret = p;
}
friend ostream& operator<<(ostream&, Auto);

friend void operator>>(ifstream&, Auto &);

float getPret()
{
return this->pret;
}

void setPret(float p)
{
this->pret = p;
}

};

void operator>>(ifstream& f, Auto &a)


{
f >> a.idAuto;
f >> a.marca;
f >> a.pret;
}

ostream& operator<<(ostream& iesire, Auto a)


{
iesire << a.idAuto << " " << a.marca << " " << a.pret << endl;
return iesire;
}
class Pers
{
public:
int idPers;
char nume[30];
Auto *pAuto;
int idAuto;
Pers()
{
idPers = 100;
strcpy(nume, "Anonim");
pAuto = NULL;
idAuto = 0; //fara masina
}

Pers(int idP, char n[30], Auto *pA, int idA)


{
this->idPers = idP;
strcpy(this->nume, n);
pAuto = pA;
this->idAuto = idA;
}
Pers(int idP, char n[30])
{
idPers = idP;
strcpy(nume, n);
}

void operator<<(Auto &a)


{
this->idAuto = a.idAuto;
this->pAuto = &a;
}

friend ostream& operator<<(ostream&, Pers);


friend void operator>>(ifstream&, Pers&);

bool operator>(Auto a)
{
if (this->pAuto->getPret()>a.getPret())
return true;
else
return false;
}
bool operator>(Pers p)
{
if (this->pAuto->getPret() > p.pAuto->getPret())
return true;
else
return false;
}

friend ofstream& operator>> (ofstream&, Pers);


};

void operator>>(ifstream& persInp, Pers& p)


{
persInp >> p.idPers;
persInp >> p.nume >> p.idAuto;
}
ostream& operator<<(ostream& iesire, Pers p)
{
iesire << p.idPers << " " << p.nume << " " << p.pAuto->idAuto << " " <<
p.pAuto->marca << endl;
return iesire;
}

ofstream& operator<<(ofstream& iesire, Pers p)


{
iesire << p.idPers << " " << p.nume << " " << p.idAuto << endl;
return iesire;
}

void main()
{
Pers p1(123, "Popescu"), p2, p3, p4;
Auto a1(1001, "Fiat", 6000), a2, a3, a4;
//persoana isi cumpara cate o masina si o pointeaza prin pAuto si idAuto
p1 << a1;
p2 << a2;

//supraincarcare operator<< pt Auto , afisare Auto


cout << a1;
cout << p1 << p2 << endl;
if (p1 > a2)
cout << endl << p1.nume << " are o masina mai scumpa decat o " <<
a2.marca;
else
cout << endl << p1.nume << " are o masina mai ieftina decat o " <<
a2.marca;
if (p1 > p2)
cout << endl << p1.nume << " are o masina mai scumpa decat masina lui "
<< p2.nume;
else
cout << endl << p1.nume << " are o masina mai ieftina decat a lui " <<
p2.nume;

//scriere in fisier de masini


ofstream autoOut("Masini.txt");
autoOut << a1;
autoOut << a2;
ofstream persOut("Persoane.txt");
persOut << p1;
persOut << p2;
//restaurare masini
ifstream autoInp("Masini.txt");
autoInp >> a3;
autoInp >> a4;
//restaurare persoane
ifstream persInp("Persoane.txt");
persInp >> p3;
persInp >> p4;

map<int, Auto> parcAuto;


parcAuto.insert(pair<int, Auto>(a3.idAuto, a3));
parcAuto.insert(pair<int, Auto>(a4.idAuto, a4));

map<int, Auto>::iterator it;


it = parcAuto.find(p3.idAuto);
p3.pAuto = &(it->second);

it = parcAuto.find(p4.idAuto);
p4.pAuto = &(it->second);

cout << p3 << endl << p4;


_getch();

You might also like