Sunteți pe pagina 1din 25

#include<iostream>

#include<fstream>
using namespace std;
class Autovehicul
{
private:
const long id_autovehicul;
char *marca;
int nr_revizii;
int an_revizii[8];
int an_fabricatie;
static int nr_autovehicule;
public:
Autovehicul():id_autovehicul(0)
{
marca = new char[strlen("Marca")+1];
strcpy(marca, "Marca");
nr_revizii=0;
an_revizii[8]=NULL;
an_fabricatie=0;
nr_autovehicule++;
}
Autovehicul(char *m,int nrrev,int anrev[8], int anfab, long idv):id_autovehicul(idv)
{
marca=new char[strlen(m)+1];
strcpy(marca, m);
nr_revizii=nrrev;
for(int i=0;i<nr_revizii;i++)
an_revizii[i]=anrev[i];
an_fabricatie=anfab;
nr_autovehicule++;
}
Autovehicul(char *m, int anfab, long idv):id_autovehicul(idv)
{
marca=new char[strlen(m)+1];
strcpy(marca, m);
an_fabricatie=anfab;
nr_autovehicule++;
}
Autovehicul(Autovehicul &a):id_autovehicul(a.id_autovehicul)
{
marca=new char[strlen(a.marca)+1];
strcpy(marca, a.marca);
nr_revizii=a.nr_revizii;
for(int i=0;i<nr_revizii;i++)
an_revizii[i]=a.an_revizii[i];
an_fabricatie=a.an_fabricatie;
nr_autovehicule++;
}
~Autovehicul()
{
delete [] marca;
}

void operator=(Autovehicul &a)


{
delete [] marca;
marca=new char[strlen(a.marca)+1];
strcpy(marca, a.marca);
nr_revizii=a.nr_revizii;
for(int i=0;i<nr_revizii;i++)
an_revizii[i]=a.an_revizii[i];
an_fabricatie=a.an_fabricatie;
nr_autovehicule++;
}
friend ostream& operator<<(ostream& iesire,Autovehicul a)
{
iesire<<"Autovehiculul "<<a.marca<<" cu id-ul unic "<<a.id_autovehicul<<" a
facut "<<a.nr_revizii<<" revizii si a fost faricat in anul "<<a.an_fabricatie<<endl;
iesire<<"Anii in care au fost efectuate revizii sunt: ";
for(int i=0;i<a.nr_revizii;i++)
iesire<<a.an_revizii[i]<<' ';
iesire<<endl;
return iesire;
}
friend ofstream& operator<<(ofstream& iesire,Autovehicul a)
{
iesire<<"Autovehiculul "<<a.marca<<" cu id-ul unic "<<a.id_autovehicul<<" a
facut "<<a.nr_revizii<<" revizii si a fost faricat in anul "<<a.an_fabricatie<<endl;
iesire<<"Anii in care au fost efectuate revizii sunt: ";
for(int i=0;i<a.nr_revizii;i++)
iesire<<a.an_revizii[i]<<' ';
iesire<<endl;
return iesire;
}
friend istream& operator>>(istream& intrare, Autovehicul &a)
{
delete [] a.marca;
a.marca=new char[50];
cout<<"Marca: "<<endl;
intrare>>a.marca;
cout<<"Nr revizii: "<<endl;
intrare>>a.nr_revizii;
cout<<"Anii in care s-au efectuat revizii: "<<endl;
for(int i=0;i<a.nr_revizii;i++)
intrare>>a.an_revizii[i];
cout<<"An fabricatie: "<<endl;
intrare>>a.an_fabricatie;
Autovehicul::nr_autovehicule++;
return intrare;
}
friend ifstream& operator>>(ifstream& intrare, Autovehicul &a)
{
delete [] a.marca;
a.marca=new char[50];
intrare>>a.marca;
intrare>>a.nr_revizii;

for(int i=0;i<a.nr_revizii;i++)
intrare>>a.an_revizii[i];
intrare>>a.an_fabricatie;
Autovehicul::nr_autovehicule++;
return intrare;

void afisare()
{
cout<<"Autovehiculul "<<marca<<" cu id-ul unic "<<id_autovehicul<<" a facut
"<<nr_revizii<<" revizii si a fost faricat in anul "<<an_fabricatie<<endl;
cout<<"Anii in care au fost efectuate revizii sunt: ";
for(int i=0;i<nr_revizii;i++)
cout<<an_revizii[i]<<' ';
cout<<endl;
}
static int get_nr_autovehicule()
{
return nr_autovehicule;
}
char* get_marca()
{
return marca;
}
int get_nr_revizii()
{
return nr_revizii;
};
int get_an_revizii()
{
return an_revizii[8];
};
int get_an_fabricatie()
{
return an_fabricatie;
};
void set_marca(char *m)
{
if(m==NULL)
cout<<"Informatii incomplete";
else
{delete [] marca;
marca = new char[strlen(m)+1];
strcpy(marca,m);}
}
void set_an_fabricatie(int anfab)
{
if(anfab<1970)
cout<<"Informatie eronata";
else
an_fabricatie=anfab;

}
void set_nr_revizii(int nrrev)
{
if(nrrev<0)
cout<<"Informatie eronata";
else
nr_revizii=nrrev;
}
void set_an_revizii(int anrev[8],int nrrev)
{
if(nrrev<0)
cout<<"Informatie eronata";
else
{for(int i=0;i<nrrev;i++)
an_revizii[i]=anrev[i];
nr_revizii=nrrev;}
}
Autovehicul operator-(Autovehicul a)
{
(*this).an_fabricatie=(*this).an_fabricatie-a.an_fabricatie;
return *this;
}
Autovehicul operator++()
{
(*this).nr_revizii++;
return *this;
}
friend Autovehicul operator++(Autovehicul &a, int)
{
Autovehicul temp = a;
a.nr_revizii++;
return temp;
}
Autovehicul operator--()
{
(*this).nr_revizii--;
return *this;
}
friend Autovehicul operator--(Autovehicul &a, int)
{
Autovehicul temp = a;
a.nr_revizii--;
return temp;
}
//Anul reviziei de mijloc; in cazul unui numar par de revizii se va returna anul mai recent
operator int()
{
if((*this).nr_revizii%2)
return (*this).an_revizii[(*this).nr_revizii/2];
else if((*this).an_revizii[(*this).nr_revizii/2-1]<(*this).an_revizii[(*this).nr_revizii/2])

return (*this).an_revizii[(*this).nr_revizii/2];
else return (*this).an_revizii[(*this).nr_revizii/2-1];
}
};
class Date_Auto
{
protected:
char *model;
char *tip_motor;
float capacitate_cilindrica;
int viteza_max;
int viteza_medie;
int viteza_med_oras;
int consum_med;
int consum_med_oras;
public:
Date_Auto()
{
model = new char[strlen("Model")+1];
strcpy(model, "Model");
tip_motor = new char[strlen("Tip_motor")+1];
strcpy(tip_motor, "Tip_motor");
capacitate_cilindrica=0;
viteza_max=0;
viteza_medie=0;
viteza_med_oras=0;
consum_med=0;
consum_med_oras=0;
}
Date_Auto(char *m,char *tm,float cc,int vmax,int vmed,int vmedo,int consm,int consmo)
{
model = new char[strlen(m)+1];
strcpy(model, m);
tip_motor = new char[strlen(tm)+1];
strcpy(tip_motor, tm);
capacitate_cilindrica=cc;
viteza_max=vmax;
viteza_medie=vmed;
viteza_med_oras=vmedo;
consum_med=consm;
consum_med_oras=consmo;
}
Date_Auto(char *m,char *tm,float cc)
{
model = new char[strlen(m)+1];
strcpy(model, m);
tip_motor = new char[strlen(tm)+1];
strcpy(tip_motor, tm);
capacitate_cilindrica=cc;
}
Date_Auto(Date_Auto &da)
{
model=new char[strlen(da.model)+1];
strcpy(model, da.model);

tip_motor=new char[strlen(da.tip_motor)+1];
strcpy(tip_motor, da.tip_motor);
capacitate_cilindrica=da.capacitate_cilindrica;
viteza_max=da.viteza_max;
viteza_medie=da.viteza_medie;
viteza_med_oras=da.viteza_med_oras;
consum_med=da.consum_med;
consum_med_oras=da.consum_med_oras;
}
~Date_Auto()
{
delete [] model;
delete [] tip_motor;
}
void operator=(Date_Auto &da)
{
delete [] model;
model=new char[strlen(da.model)+1];
strcpy(model, da.model);
delete [] tip_motor;
tip_motor=new char[strlen(da.tip_motor)+1];
strcpy(tip_motor, da.tip_motor);
capacitate_cilindrica=da.capacitate_cilindrica;
viteza_max=da.viteza_max;
viteza_medie=da.viteza_medie;
viteza_med_oras=da.viteza_med_oras;
consum_med=da.consum_med;
consum_med_oras=da.consum_med_oras;
}
friend ostream& operator<<(ostream& iesire,Date_Auto da)
{
iesire<<"Model: "<<da.model<<"; Tipul motorului: "<<da.tip_motor<<"; Viteza
maxima: "<<da.viteza_max<<"; Capacitate cilindrica: "<<da.capacitate_cilindrica<<";
Consumul mediu in oras: "<<da.consum_med_oras<<"; Viteza medie in oras:
"<<da.viteza_med_oras<<"; Consumul mediu: "<<da.consum_med<<"; Viteza medie:
"<<da.viteza_medie<<endl;
iesire<<endl;
return iesire;
}
friend ofstream& operator<<(ofstream& iesire,Date_Auto da)
{
iesire<<"Model: "<<da.model<<"; Tipul motorului: "<<da.tip_motor<<"; Viteza
maxima: "<<da.viteza_max<<"; Capacitate cilindrica: "<<da.capacitate_cilindrica<<";
Consumul mediu in oras: "<<da.consum_med_oras<<"; Viteza medie in oras:
"<<da.viteza_med_oras<<"; Consumul mediu: "<<da.consum_med<<"; Viteza medie:
"<<da.viteza_medie<<endl;
iesire<<endl;
return iesire;
}
friend istream& operator>>(istream& intrare, Date_Auto &da)
{
delete [] da.model;
da.model=new char[20];

cout<<"Model: "<<endl;
intrare>>da.model;
delete [] da.tip_motor;
da.tip_motor=new char[20];
cout<<"Tipul motorului: "<<endl;
intrare>>da.tip_motor;
cout<<"Capacitate cilindrica: "<<endl;
intrare>>da.capacitate_cilindrica;
cout<<"Viteza maxima: "<<endl;
intrare>>da.viteza_max;
cout<<"Viteza medie: "<<endl;
intrare>>da.viteza_medie;
cout<<"Viteza medie in oras: ";
intrare>>da.viteza_med_oras;
cout<<"Consumul mediu: ";
intrare>>da.consum_med;
cout<<"Consumul mediu in oras: ";
intrare>>da.consum_med_oras;
return intrare;

friend ifstream& operator>>(ifstream& intrare, Date_Auto &da)


{
delete [] da.model;
da.model=new char[20];
intrare>>da.model;
delete [] da.tip_motor;
da.tip_motor=new char[20];
intrare>>da.tip_motor;
intrare>>da.viteza_max;
intrare>>da.capacitate_cilindrica;
intrare>>da.consum_med_oras;
intrare>>da.viteza_med_oras;
intrare>>da.consum_med;
intrare>>da.viteza_medie;
return intrare;
}
void afisare()
{
cout<<"Model: "<<model<<"; Tipul motorului: "<<tip_motor<<"; Capacitate
cilindrica: "<<capacitate_cilindrica<<"; Viteza maxima: "<<viteza_max<<"; Viteza medie:
"<<viteza_medie<<"; Viteza medie in oras: "<<viteza_med_oras<<"; Consumul mediu:
"<<consum_med<<"; Consumul mediu in oras: "<<consum_med_oras<<endl;
cout<<endl;
}
char* get_model()
{
return model;
}
char* get_tip_motor()
{
return tip_motor;
}
int get_cap_cilindirca()

return capacitate_cilindrica;

}
int get_viteza_max()
{
return viteza_max;
}
int get_viteza_medie()
{
return viteza_medie;
}
int get_viteza_med_oras()
{
return viteza_med_oras;
}
int get_consum_med()
{
return consum_med;
}
int get_consum_med_oras()
{
return consum_med_oras;
}
void set_model(char* m)
{
if(m==NULL)
cout<<"Informatii incomplete";
else
{delete [] model;
model = new char[strlen(m)+1];
strcpy(model,m);}
}
void set_tip_motor(char* tm)
{
if(tm==NULL)
cout<<"Informatii incomplete";
else
{delete [] tip_motor;
tip_motor = new char[strlen(tm)+1];
strcpy(tip_motor,tm);}
}
void set_cap_cilindrica(float cc)
{
if(cc<1)
cout<<"Informatie eronata";
else
capacitate_cilindrica=cc;
}

void set_viteza_max(int vmax)


{
if(vmax<=0)
cout<<"Informatie eronata";
else
viteza_max=vmax;
}
void set_viteza_med(int vmed)
{
if(vmed<=0)
cout<<"Informatie eronata";
else
viteza_medie=vmed;
}
void set_viteza_med_oras(int vmedo)
{
if(vmedo<=0)
cout<<"Informatie eronata";
else
viteza_med_oras=vmedo;
}
void set_cons_med(int cmed)
{
if(cmed<=0)
cout<<"Informatie eronata";
else
consum_med=cmed;
}
void set_cons_med_oras(int cmedo)
{
if(cmedo<=0)
cout<<"Informatie eronata";
else
consum_med_oras=cmedo;
}
Date_Auto operator+(Date_Auto da)
{
(*this).capacitate_cilindrica=(*this).capacitate_cilindrica+da.capacitate_cilindrica;
return *this;
}
//conversie litru->cm cub
Date_Auto operator*(int x)
{
x=1000;
(*this).capacitate_cilindrica=(*this).capacitate_cilindrica*x;
return *this;
}
//conversie cm cub->litru
Date_Auto operator/(int x)
{

x=1000;
(*this).capacitate_cilindrica=(*this).capacitate_cilindrica/x;
return *this;

};
class Coordonate_Geografice
{
private:
double latitudine;
double longitudine;
public:
Coordonate_Geografice()
{
latitudine=0;
longitudine=0;
}
Coordonate_Geografice(double lat, double longit)
{
latitudine=lat;
longitudine=longit;
}
Coordonate_Geografice(Coordonate_Geografice &cg)
{
latitudine=cg.latitudine;
longitudine=cg.longitudine;
}
void operator=(Coordonate_Geografice &cg)
{
latitudine=cg.latitudine;
longitudine=cg.longitudine;
}
friend ostream& operator<<(ostream& iesire,Coordonate_Geografice cg)
{
iesire<<"Latitudine: "<<
cg.latitudine<<"; Longitudine: "<<
cg.longitudine<<endl;
iesire<<endl;
return iesire;
}
friend istream& operator>>(istream& intrare, Coordonate_Geografice &cg)
{
cout<<"Latitudine: "<<endl;
intrare>>cg.latitudine;
cout<<"Longitudine: "<<endl;
intrare>>cg.longitudine;
return intrare;
}
void afisare()
{

cout<<"Latitudine: "<<latitudine<<"; Longitudine: "<<longitudine<<endl;


cout<<endl;
}
double get_latitudine()
{
return latitudine;
}
double get_longitudine()
{
return longitudine;
}
void set_latitudine(double lat)
{
if(lat<0)
cout<<"Informatie eronata";
else
latitudine=lat;
}
void set_longitudine(double longit)
{
if(longit<0)
cout<<"Informatie eronata";
else
longitudine=longit;
}
~Coordonate_Geografice()
{}
};
class Pozitie
{
private:
char *denumire;
int viteza;
long long timp;
Coordonate_Geografice coord;
public:
Pozitie()
{
denumire=new char[strlen("Denumire") + 1];
denumire=strcpy(denumire, "Denumire");
viteza=0;
timp=0;
coord;
}
Pozitie(char *den, int v, long long t, Coordonate_Geografice c)
{
denumire=new char[strlen(den)+1];
strcpy(denumire, den);
viteza=v;
timp=t;
coord=c;
}

Pozitie(char *den, Coordonate_Geografice c)


{
denumire=new char[strlen(den)+1];
strcpy(denumire, den);
coord=c;
}
Pozitie(Pozitie &p)
{
denumire=new char[strlen(p.denumire)+1];
strcpy(denumire, p.denumire);
viteza=p.viteza;
timp=p.timp;
coord=p.coord;
}
~Pozitie()
{
delete [] denumire;
}
void operator=(Pozitie &p)
{
delete [] denumire;
denumire=new char[strlen(p.denumire)+1];
strcpy(denumire, p.denumire);
viteza=p.viteza;
timp=p.timp;
coord=p.coord;
}
friend ostream& operator<<(ostream& iesire,Pozitie p)
{
iesire<<"Denumire: "<<p.denumire<<"; Timp: "<<p.timp<<"; Coordonate:
"<<p.coord<<"; Viteza: "<<p.viteza<<endl;
iesire<<endl;
return iesire;
}
friend ofstream& operator<<(ofstream& iesire,Pozitie p)
{
iesire<<"Denumire: "<<p.denumire<<"; Timp: "<<p.timp<<"; Coordonate:
"<<p.coord<<"; Viteza: "<<p.viteza<<endl;
iesire<<endl;
return iesire;
}
friend istream& operator>>(istream& intrare, Pozitie &p)
{
delete [] p.denumire;
p.denumire=new char[20];
cout<<"Denumire: "<<endl;
intrare>>p.denumire;
cout<<"Viteza: "<<endl;
intrare>>p.viteza;
cout<<"Timp: "<<endl;

intrare>>p.timp;
cout<<"Coordonate: ";
intrare>>p.coord;
return intrare;
}
friend ifstream& operator>>(ifstream& intrare, Pozitie &p)
{
delete [] p.denumire;
p.denumire=new char[20];
intrare>>p.denumire;
intrare>>p.timp;
intrare>>p.coord;
intrare>>p.viteza;
return intrare;
}
void afisare()
{
cout<<"Denumire: "<<denumire<<"; Timp: "<<timp<<"; Coordonate:
"<<coord<<"; Viteza: "<<viteza<<endl;
cout<<endl;
}
char* get_denumire()
{
return denumire;
}
int get_viteza()
{
return viteza;
}
int get_timp()
{
return timp;
}
Coordonate_Geografice get_coord()
{
return coord;
}
void set_denumire(char *den)
{
if(den==NULL)
cout<<"Informatii incomplete";
else
{delete [] denumire;
denumire=new char[strlen(den)+1];
strcpy(denumire,den);}
}
void set_viteza(int v)
{

if(v<0)

cout<<"Informatie eronata";
else if(v==0)
cout<<"Autovehiculul stationeaza";
else
viteza=v;
}
void set_timp(long long t)
{
if(t<0)
cout<<"Informatie eronata";
else
timp=t;
}
void set_coord(Coordonate_Geografice c)
{
coord=c;
}
};
class Zone
{
protected:
char *tip_zona;
char *restrictie;
Coordonate_Geografice punct_referinta;
Coordonate_Geografice dreapta_jos;
Coordonate_Geografice stanga_sus;
public:
Zone()
{
tip_zona=new char[strlen("Zona")+1];
strcpy(tip_zona,"Zona");
restrictie=new char[strlen("Restrictie")+1];
strcpy(restrictie,"Restrictie");
punct_referinta;
dreapta_jos;
stanga_sus;
}
Zone(char *tz,char *r,Coordonate_Geografice pref)
{
tip_zona=new char[strlen(tz)+1];
strcpy(tip_zona, tz);
restrictie=new char[strlen(r)+1];
strcpy(restrictie, r);
punct_referinta=pref;
}
Zone(char *tz,char *r,Coordonate_Geografice dj,Coordonate_Geografice ss)
{
tip_zona=new char[strlen(tz)+1];
strcpy(tip_zona, tz);
restrictie=new char[strlen(r)+1];
strcpy(restrictie, r);
dreapta_jos=dj;

stanga_sus=ss;

Zone(Zone &z)
{
tip_zona=new char[strlen(z.tip_zona)+1];
strcpy(tip_zona, z.tip_zona);
restrictie=new char[strlen(z.restrictie)+1];
strcpy(restrictie, z.restrictie);
punct_referinta=z.punct_referinta;
dreapta_jos=z.dreapta_jos;
stanga_sus=z.stanga_sus;
}
~Zone()
{
delete [] tip_zona;
delete [] restrictie;
}
void operator=(Zone &z)
{
if(tip_zona==z.tip_zona)
{delete [] tip_zona;
tip_zona=new char[strlen(z.tip_zona)+1];
strcpy(tip_zona, z.tip_zona);
delete [] restrictie;
restrictie=new char[strlen(z.restrictie)+1];
strcpy(restrictie, z.restrictie);
punct_referinta=z.punct_referinta;
dreapta_jos=z.dreapta_jos;
stanga_sus=z.stanga_sus;}
else cout<<"Zone de tip diferit!"<<endl;
}
friend ostream& operator<<(ostream& iesire,Zone z)
{
if(strstr(z.tip_zona,"Cerc"))
iesire<<"Tip_zona: cerc; Restrictie: "<<z.restrictie<<"; Punct referinta:
"<<z.punct_referinta<<endl;
else if(strstr(z.tip_zona,"Dreptunghi"))
iesire<<"Tip_zona: dreptunghi; Restrictie: "<<z.restrictie<<"; Dreapta jos:
"<<z.dreapta_jos<<"; Stanga sus: "<<z.stanga_sus<<endl;
else iesire<<"Zona nerecunoscuta";
iesire<<endl;
return iesire;
}
friend istream& operator>>(istream& intrare, Zone z)
{
delete [] z.tip_zona;
z.tip_zona=new char[10];
cout<<"Tipul zonei: "<<endl;
intrare>>z.tip_zona;
delete [] z.restrictie;
z.restrictie=new char[10];
cout<<"Restrictie: "<<endl;
intrare>>z.restrictie;

if(strstr(z.tip_zona,"Cerc"))
{
cout<<"Punct de referinta: "<<endl;
intrare>>z.punct_referinta;
}
else if(strstr(z.tip_zona,"Dreptunghi"))
{
cout<<"Dreapta jos: "<<endl;
intrare>>z.dreapta_jos;
cout<<"Stanga sus: "<<endl;
intrare>>z.stanga_sus;
}
return intrare;

virtual void afisare()


{
if(strstr(tip_zona,"Cerc"))
cout<<"Tip_zona: cerc; Restrictie: "<<restrictie<<"; Punct referinta:
"<<punct_referinta<<endl;
else if(strstr(tip_zona,"Dreptunghi"))
cout<<"Tip_zona: dreptunghi; Restrictie: "<<restrictie<<"; Dreapta jos:
"<<dreapta_jos<<"; Stanga sus: "<<stanga_sus<<endl;
else cout<<"Zona nerecunoscuta";
cout<<endl;
}
char* get_tip_zona()
{
return tip_zona;
}
char* get_restrictie()
{
return restrictie;
}
Coordonate_Geografice get_punct_referinta()
{
return punct_referinta;
}
Coordonate_Geografice get_dreapta_jos()
{
return dreapta_jos;
}
Coordonate_Geografice get_stanga_sus()
{
return stanga_sus;
}
void set_tip_zona(char *tz)
{
if(tz==NULL)
cout<<"Informatii incomplete"<<endl;
else
{delete [] tip_zona;

tip_zona = new char[strlen(tz)+1];


strcpy(tip_zona,tz);}
}
void set_restrictie(char *r)
{
if(r==NULL)
cout<<"Informatii incomplete"<<endl;
else
{delete [] restrictie;
restrictie = new char[strlen(r)+1];
strcpy(restrictie,r);}
}
void set_punct_referinta(Coordonate_Geografice pref)
{
punct_referinta=pref;
}
void set_dreapta_jos(Coordonate_Geografice dj)
{
dreapta_jos=dj;
}
void set_stanga_sus(Coordonate_Geografice ss)
{
stanga_sus=ss;
}
char operator[](int i)
{
if(i>=0 && i<(strlen((*this).tip_zona)))
return (*this).tip_zona[i];
else return -1;
}
};
class Suprafata_Zone: public Zone
{
protected:
char* mediu; // rural/urban - predominant
float raza;
float lungime;
float latime;
public:
Suprafata_Zone():Zone()
{
mediu=new char[strlen("Mediu")+1];
strcpy(mediu,"Mediu");
raza=0.0;
lungime=0.0;
latime=0.0;
}
Suprafata_Zone(char *tz,char *r,Coordonate_Geografice pref,char *med,float
rz):Zone(tz,r,pref)
{
mediu=new char[strlen(med)+1];
strcpy(mediu,med);

raza=rz;
}
Suprafata_Zone(char *tz,char *r,Coordonate_Geografice dj,Coordonate_Geografice ss,char
*med,float lung,float lat):Zone(tz,r,dj,ss)
{
mediu=new char[strlen(med)+1];
strcpy(mediu,med);
lungime=lung;
latime=lat;
}
~Suprafata_Zone()
{
delete [] mediu;
}
Suprafata_Zone(Suprafata_Zone &sz):Zone(sz)
{
tip_zona=new char[strlen(sz.tip_zona)+1];
strcpy(tip_zona, sz.tip_zona);
restrictie=new char[strlen(sz.restrictie)+1];
strcpy(restrictie, sz.restrictie);
mediu=new char[strlen(sz.mediu)+1];
strcpy(mediu, sz.mediu);
punct_referinta=sz.punct_referinta;
dreapta_jos=sz.dreapta_jos;
stanga_sus=sz.stanga_sus;
raza=sz.raza;
lungime=sz.lungime;
latime=sz.latime;
}
void operator=(Suprafata_Zone &sz)
{
delete [] tip_zona;
tip_zona=new char[strlen(sz.tip_zona)+1];
strcpy(tip_zona, sz.tip_zona);
delete [] restrictie;
restrictie=new char[strlen(sz.restrictie)+1];
strcpy(restrictie, sz.restrictie);
delete [] mediu;
mediu=new char[strlen(sz.mediu)+1];
strcpy(mediu, sz.mediu);
punct_referinta=sz.punct_referinta;
dreapta_jos=sz.dreapta_jos;
stanga_sus=sz.stanga_sus;
raza=sz.raza;
lungime=sz.lungime;
latime=sz.latime;
}
virtual void afisare()
{
if(strstr(tip_zona,"Cerc"))
cout<<"Tip_zona: cerc; Restrictie: "<<restrictie<<"; Punct referinta:
"<<punct_referinta<<"; Mediu: "<<mediu<<"; Raza: "<<raza<<endl;
else if(strstr(tip_zona,"Dreptunghi"))

cout<<"Tip_zona: dreptunghi; Restrictie: "<<restrictie<<"; Dreapta jos:


"<<dreapta_jos<<"; Stanga sus: "<<stanga_sus<<"; Mediu: "<<mediu<<"; Lungime:
"<<lungime<<"; Latime: "<<latime<<endl;
else cout<<"Zona nerecunoscuta";
cout<<endl;
}
friend ostream& operator<<(ostream& iesire,Suprafata_Zone sz)
{
if(strstr(sz.tip_zona,"Cerc"))
iesire<<"Tip_zona: cerc; Restrictie: "<<sz.restrictie<<"; Punct referinta:
"<<sz.punct_referinta<<"; Mediu: "<<sz.mediu<<"; Raza: "<<sz.raza<<endl;
else if(strstr(sz.tip_zona,"Dreptunghi"))
iesire<<"Tip_zona: dreptunghi; Restrictie: "<<sz.restrictie<<"; Dreapta
jos: "<<sz.dreapta_jos<<"; Stanga sus: "<<sz.stanga_sus<<"; Mediu: "<<sz.mediu<<";
Lungime: "<<sz.lungime<<"; Latime: "<<sz.latime<<endl;
else iesire<<"Zona nerecunoscuta";
iesire<<endl;
return iesire;
}
friend istream& operator>>(istream& intrare, Suprafata_Zone sz)
{
delete [] sz.tip_zona;
sz.tip_zona=new char[10];
cout<<"Tipul zonei: "<<endl;
intrare>>sz.tip_zona;
delete [] sz.restrictie;
sz.restrictie=new char[10];
cout<<"Restrictie: "<<endl;
intrare>>sz.restrictie;
delete [] sz.mediu;
sz.mediu=new char[10];
cout<<"Mediu: "<<endl;
intrare>>sz.mediu;
if(strstr(sz.tip_zona,"Cerc"))
{
cout<<"Punct de referinta: "<<endl;
intrare>>sz.punct_referinta;
cout<<"Raza: "<<endl;
intrare>>sz.raza;
}
else if(strstr(sz.tip_zona,"Dreptunghi"))
{
cout<<"Dreapta jos: "<<endl;
intrare>>sz.dreapta_jos;
cout<<"Stanga sus: "<<endl;
intrare>>sz.stanga_sus;
cout<<"Lungime: "<<endl;
intrare>>sz.lungime;
cout<<"Latime: "<<endl;
intrare>>sz.latime;
}
return intrare;
}
char* get_mediu()
{

return mediu;

float get_raza()
{
return raza;
}
float get_lungime()
{
return lungime;
}
float get_latime()
{
return latime;
}
void set_mediu(char *m)
{
if(m==NULL)
cout<<"Informatii incomplete";
else
{
delete[]mediu;
mediu=new char[strlen(m) + 1];
mediu=strcpy(mediu, m);
}
}
void set_raza(float r)
{
if(r<=0)
cout<<"Informatie eronata";
else raza=r;
}
void set_lungime(float lung)
{
if(lung<=0)
cout<<"Informatie eronata";
else lungime=lung;
}
void set_latime(float lat)
{
if(lat<=0)
cout<<"Informatie eronata";
else latime=lat;
}
float get_suprafata_cerc()
{
return 3.14*raza*raza;
}
float get_suprafata_dreptunghi()
{

return lungime*latime;

};
class Green_Driving: public Date_Auto
{
protected:
char *tip_cutie_viteze;
int putere;
float emisii_CO2; //g/km
public:
Green_Driving():Date_Auto()
{
tip_cutie_viteze=new char[strlen("Cutie-viteze")+1];
strcpy(tip_cutie_viteze,"Cutie-viteze");
putere=0;
emisii_CO2=0.0;
}
Green_Driving(char *m,char *tm,float cc,int vmax,int vmed,int vmedo,int consm,int
consmo,char *cv,int p,float CO2):Date_Auto(m,tm,cc,vmax,vmed,vmedo,consm,consmo)
{
tip_cutie_viteze=new char[strlen(cv)+1];
strcpy(tip_cutie_viteze,cv);
putere=p;
emisii_CO2=CO2;
}
Green_Driving(Green_Driving &gd):Date_Auto(gd)
{
model=new char[strlen(gd.model)+1];
strcpy(model, gd.model);
tip_motor=new char[strlen(gd.tip_motor)+1];
strcpy(tip_motor, gd.tip_motor);
capacitate_cilindrica=gd.capacitate_cilindrica;
viteza_max=gd.viteza_max;
viteza_medie=gd.viteza_medie;
viteza_med_oras=gd.viteza_med_oras;
consum_med=gd.consum_med;
consum_med_oras=gd.consum_med_oras;
tip_cutie_viteze=new char[strlen(gd.tip_cutie_viteze)+1];
strcpy(tip_cutie_viteze,gd.tip_cutie_viteze);
putere=gd.putere;
emisii_CO2=gd.emisii_CO2;
}
~Green_Driving()
{
delete [] tip_cutie_viteze;
}
void operator=(Green_Driving &gd)
{
delete [] model;
model=new char[strlen(gd.model)+1];
strcpy(model,gd.model);
delete [] tip_motor;
tip_motor=new char[strlen(gd.tip_motor)+1];

strcpy(tip_motor, gd.tip_motor);
capacitate_cilindrica=gd.capacitate_cilindrica;
viteza_max=gd.viteza_max;
viteza_medie=gd.viteza_medie;
viteza_med_oras=gd.viteza_med_oras;
consum_med=gd.consum_med;
consum_med_oras=gd.consum_med_oras;
delete [] tip_cutie_viteze;
strcpy(tip_cutie_viteze,gd.tip_cutie_viteze);
putere=gd.putere;
emisii_CO2=gd.emisii_CO2;

friend ostream& operator<<(ostream& iesire,Green_Driving gd)


{
iesire<<"Model: "<<gd.model<<"; Tipul motorului: "<<gd.tip_motor<<";
Capacitate cilindrica: "<<gd.capacitate_cilindrica<<"; Viteza maxima: "<<gd.viteza_max<<";
Viteza medie: "<<gd.viteza_medie<<"; Viteza medie in oras: "<<gd.viteza_med_oras<<";
Consumul mediu: "<<gd.consum_med<<"; Consumul mediu in oras:
"<<gd.consum_med_oras<<"; Tipul cutiei de viteze: "<<gd.tip_cutie_viteze<<"; Putere:
"<<gd.putere<<"; Emisii CO2: "<<gd.emisii_CO2<<endl;
iesire<<endl;
return iesire;
}
friend istream& operator>>(istream& intrare, Green_Driving &gd)
{
delete [] gd.model;
gd.model=new char[20];
cout<<"Model: "<<endl;
intrare>>gd.model;
delete [] gd.tip_motor;
gd.tip_motor=new char[20];
cout<<"Tipul motorului: "<<endl;
intrare>>gd.tip_motor;
cout<<"Capacitate cilindrica: "<<endl;
intrare>>gd.capacitate_cilindrica;
cout<<"Viteza maxima: "<<endl;
intrare>>gd.viteza_max;
cout<<"Viteza medie: "<<endl;
intrare>>gd.viteza_medie;
cout<<"Viteza medie in oras: ";
intrare>>gd.viteza_med_oras;
cout<<"Consumul mediu: ";
intrare>>gd.consum_med;
cout<<"Consumul mediu in oras: ";
intrare>>gd.consum_med_oras;
intrare>>gd.tip_cutie_viteze;
delete [] gd.tip_cutie_viteze;
gd.tip_cutie_viteze=new char[20];
cout<<"Tipul cutiei de viteze: "<<endl;
intrare>>gd.tip_cutie_viteze;
cout<<"Putere: "<<endl;
intrare>>gd.putere;
cout<<"Emisii CO2: "<<endl;
intrare>>gd.emisii_CO2;
return intrare;
}

virtual void afisare()


{
cout<<"Model: "<<model<<"; Tipul motorului: "<<tip_motor<<"; Capacitate
cilindrica: "<<capacitate_cilindrica<<"; Viteza maxima: "<<viteza_max<<"; Viteza medie:
"<<viteza_medie<<"; Viteza medie in oras: "<<viteza_med_oras<<"; Consumul mediu:
"<<consum_med<<"; Consumul mediu in oras: "<<consum_med_oras<<"; Tipul cutiei de
viteze: "<<tip_cutie_viteze<<"; Putere: "<<putere<<"; Emisii CO2: "<<emisii_CO2<<endl;
cout<<endl;
}
char* get_tip_cutie_viteze()
{
return tip_cutie_viteze;
}
int get_putere()
{
return putere;
}
float get_emisii_CO2()
{
return emisii_CO2;
}
void set_tip_cutie_viteze(char *cv)
{
if(cv==NULL)
cout<<"Informatii incomplete";
else tip_cutie_viteze=cv;
}
void set_putere(int p)
{
if(p<=0)
cout<<"Informatii eronate";
else putere=p;
}
void set_emisii_CO2(float CO2)
{
if(CO2<0)
cout<<"Informatii eronate";
else emisii_CO2=CO2;
}
};
int Autovehicul::nr_autovehicule=0;
void main()
{
//Autovehicul a1;
//Autovehicul a2("Renault",2009,843672);
//int anrev3[5]={2005,2012, 2011, 2014};
//Autovehicul a3("Ford",4,anrev3,2004,26452);
//cout<<(int)a3;

//(a3-a2).afisare();
//a1.afisare();
//a2.afisare();
//a3.afisare();
//Autovehicul a4=a2;
//a2.afisare();
//a1=a3;
//a1.afisare();
//cout<<"..........................."<<endl;
//Autovehicul a5;
//cin>>a5;
//cout<<a5;
//a2.set_an_revizii(anrev3,3);
//a2.afisare();
//Coordonate_Geografice cg1;
//Coordonate_Geografice cg2(24683241,213124343);
//cg2.afisare();
//cout<<cg2;
//cg1=cg2;
//cout<<cg2;
//Coordonate_Geografice cg4=cg2;
//cg4.afisare();
//cin>>cg4;
//cout<<cg4;
//cg4.set_latitudine(2);
//cout<<cg4;
//Pozitie p1;
//p1.afisare();
//Coordonate_Geografice cg2(246,2131);
//Pozitie p2("Necunoscuta", 100, 43254, cg2);
//p2.afisare();
//p1=p2;
//cout<<p2;
//Pozitie p4=p2;
//p4.afisare();
//cin>>p4;
//cout<<p4;
//p4.set_coord(cg2);
//cout<<p4;
//Date_Auto da1;
//da1.afisare();
//Date_Auto da2("Logan","benzina",1800);
//Date_Auto da3("Sedan","motorina",1954,280,65,45,7,9);
//Green_Driving gd1("Sedan","motorina",1954,280,65,45,7,9,"Manuala",4324,52);
//cout<<gd1;
//Green_Driving gd2;
//gd2.afisare();
//cin>>gd2;
//int x=0;
//(da2/x).afisare();
//(da2*x).afisare();
//(da3+da2).afisare();
//da2.afisare();
//da3.afisare();
//Date_Auto da4=da2;
//da2.afisare();
//da1=da3;
//da1.afisare();

//Date_Auto da6;
//cin>>da6;
//cout<<da6;
//Coordonate_Geografice cg2(246,2131);
//Zone z1("Cerc","r1",cg2);
//Coordonate_Geografice cg3(231,1097);
//Zone z2("Dreptunghi","r2",cg3,cg2);
//z1.afisare();
//z2.afisare();
//z2=z1;
//z2.afisare();
//Zone z3("Cerc","r6",cg2);
//Zone z4("Dreptunghi","r9",cg3,cg2);
//cout<<z3;
//cout<<z4;
//Suprafata_Zone sz1("Cerc","R5",cg2,"Urban",5);
//sz1.afisare();
//cout<<sz1.get_suprafata_cerc();
//cout<<sz1;
//Suprafata_Zone z0;
//cout<<z0;
//Suprafata_Zone z01;
//cin>>z01;
//cout<<z01;
/*Pozitie a2;
ifstream g("1.txt",ios_base::in);
while(!g.eof()){
g>>a2;
cout<<a2;}
g.close();*/
/*Date_Auto a2;
ifstream f("2.txt",ios_base::in);
while(!f.eof()){
g>>a2;
cout<<a2;}
g.close();*/
}

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