Anda di halaman 1dari 10

#include<iostream>

#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<vector>
#include<fstream>
using namespace std;
class Angajat_abstract
{
public:int salariu;
virtual long calcul_salariu()//pointer catre functie initializat cu n
ull (functie virtuala pura)
{ return salariu;}
};
class Angajat
{
protected:
char *nume;
long salariu;
int varsta;
char* CNP;
public:
//proprietati sau interfete pentru atributele private(set-eri, get-eri)
void set_nume(char* val)
{
nume=new char[strlen(val)+1];
strcpy(nume,val);
}
void set_salariul( long val)
{
salariu=val;
}
void set_varsta( int val)
{
varsta=val;
}
void set_CNP(char* val)
{
CNP=new char[strlen(val)+1];
strcpy(CNP,val);
}
char* get_nume()
{
return nume;
}
long get_salariul()
{

return salariu;
}
int get_varsta()
{
return varsta;
}
char* get_CNP()
{
return CNP;
}

//constructor fara parametrii


Angajat()
{
nume=new char[strlen("nume")+1];
strcpy(nume,"nume");
CNP=new char[strlen("CNP")+1];
strcpy(CNP, "CNP");
salariu=200;
varsta=30;
}
//costructor cu parametrii
Angajat(char* nume, long salariu, int varsta,char* CNP)
{
this->nume=new char[strlen("nume")+1];
strcpy(this->nume,"nume");
this->CNP=new char[strlen("CNP")+1];
strcpy(this->CNP,"CNP");
this->salariu=salariu;
this->varsta=varsta;
}
//constructor de copiere
Angajat (const Angajat & temp)
{
this->nume=new char[strlen(temp.nume)+1];
strcpy(this->nume,temp.nume);
this->CNP=new char[strlen(temp.CNP)+1];
strcpy(this->CNP,temp.CNP);
this->salariu=temp.salariu;
this->varsta=temp.varsta;
}
//destructor
~Angajat()
{

delete[] nume;
delete[] CNP;
}
//supraincarcare opreator "=" pentru atribuire
Angajat & operator=(Angajat &temp)
{
delete [] nume;
delete [] CNP;
this->nume=new char[strlen(temp.nume)+1];
strcpy(this->nume,temp.nume);
this->CNP=new char[strlen(temp.CNP)+1];
strcpy(this->CNP,temp.CNP);
this->salariu=temp.salariu;
this->varsta=temp.varsta;
return *this;
}
//supraincarcare operator "+" primire suma din salariu
long operator +(long suma)
{
salariu+=suma;
return salariu;
}
//supraincarcare operator "-" retinere suma din salariu
long operator -(long suma)
{
salariu-=suma;
return salariu;
}
//supraincarcare operator "+" pentru adunare obiecte
long operator +(Angajat &a)
{
return salariu+=a.salariu;
}
//supraincarcare operator "-" pentru scadere obiecte
long operator -(Angajat &a)
{
return salariu-=a.salariu;
}

//cast conversie Angajat in long


operator long()
{
return salariu;
}
//cast conversie Angajat in int

operator int()
{
return varsta;
}
//cast conversie Angajat in char *
operator char*()
{
return nume;
return CNP;
}
};
//CLASA 1 DERIVATA
class Angajat_cu_ziua: public Angajat
{
private:
int timpdelucru;
bool angajat_acum;
public:
friend ostream &operator << (ostream &out, Angajat_cu_ziua a);
friend istream &operator>> (istream &in,Angajat_cu_ziua &a);
//constructor fara parametrii
Angajat_cu_ziua():Angajat()
{
this->timpdelucru=8;
this->angajat_acum=false;
}
//constructor cu parametrii
Angajat_cu_ziua(int timpdelucru, bool angajat_acum, char* nume, long sal
ariu, int varsta, char* CNP): Angajat(nume, salariu, varsta, CNP)
{
this->timpdelucru=timpdelucru;
this->angajat_acum=angajat_acum;
}
//constructor de copiere
Angajat_cu_ziua (const Angajat_cu_ziua &temp):Angajat(temp)
{
this->timpdelucru=temp.timpdelucru;
this->angajat_acum=temp.angajat_acum;
}
//supraincarcare operator "=" pentru atribuire
Angajat_cu_ziua &operator=(Angajat_cu_ziua &temp)
{
delete [] nume;
delete [] CNP;
this->nume=new char[strlen(temp.nume)+1];
strcpy(this->nume,temp.nume);
this->CNP=new char[strlen(temp.CNP)+1];
strcpy(this->CNP,temp.CNP);

this->salariu=temp.salariu;
this->varsta=temp.varsta;
this->timpdelucru=temp.timpdelucru;
this->angajat_acum=temp.angajat_acum;
return *this;
}
void set_timpdelucru(int val)
{
timpdelucru=val;
}
void set_angajat_acum(bool val)
{
angajat_acum=val;
}
int get_timpdelucru()
{
return timpdelucru;
}
bool get_angajat_acum()
{
return angajat_acum;
}
};
//CLASA DERIVATA 2
class Angajatinacord: public Angajat
{
private: char* functie;
int experienta;
public:
friend ostream &operator << (ostream &out, Angajatinacord a);
friend istream &operator>> (istream &in,Angajatinacord &a);
//constructor fara parametrii
Angajatinacord(): Angajat()
{
this->functie="manager";
this->experienta=10;
}
//constructor cu parametrii
Angajatinacord( char* functie, int experienta, char* nume, long salariu,
int varsta, char* CNP): Angajat(nume, salariu, varsta, CNP)
{
this->functie=new char[strlen("functie")+1];
strcpy(this->functie,"functie");
this->experienta=experienta;
}
//constructor de copiere

Angajatinacord (const Angajatinacord &temp):Angajat(temp)


{
this->functie=new char[strlen(temp.functie)+1];
strcpy(this->functie,temp.functie);
this->experienta=temp.experienta;
}
Angajatinacord
{
delete
delete
delete

&operator=(Angajatinacord &temp)
[] nume;
[] CNP;
[] functie;

this->nume=new char[strlen(temp.nume)+1];
strcpy(this->nume,temp.nume);
this->CNP=new char[strlen(temp.CNP)+1];
strcpy(this->CNP,temp.CNP);
this->salariu=temp.salariu;
this->varsta=temp.varsta;
this->functie=new char[strlen(temp.functie)+1];
strcpy(this->functie,temp.functie);
this->experienta=temp.experienta;
return *this;
}
void set_functie( char* valoare)
{
functie=valoare;
}
void set_experienta( int valoare)
{
experienta=valoare;
}
char* get_functie()
{
return functie;
}
int get_experienta()
{
return experienta;
}
//preincrementare
Angajatinacord operator++()
{
this->set_varsta(this->get_varsta()+1);
this->experienta++;
return *this;
}
//postincrementare
Angajatinacord operator++(int d)

{
Angajatinacord aux=*this;
this->set_varsta(this->get_varsta()+1);
this->experienta++;
return aux;
}
//destructor
~Angajatinacord()
{
delete [] functie;
}
};

//supraincarcarea operatorilor de lucru cu consola


//supraincarcare operator <<
ostream &operator<<(ostream & out, Angajat_cu_ziua a)
{
out<<"Angajatul cu ziulica"<<"\ntimpdelucru:"<<a.timpdelucru<<"\nangajat
_acum:"<<a.angajat_acum<<"\nnume:"<<a.nume<<"\nsalariul:"<<a.salariu<<"\nvarsta:
"<<a.varsta<<"\nCNP:"<<a.CNP;
return out;
}
ostream &operator<<(ostream & out, Angajatinacord a)
{
out<<"Angajatul in acord: "<<"\nfunctie:"<<a.functie<<"\nexperienta:"<<a
.experienta<<"\nnume:"<<a.nume<<"\salariul:"<<a.salariu<<"\nvarsta:"<<a.varsta<<
"\nCNP:"<<a.CNP;
return out;
}
//supraincarcare operator >>
istream &operator>> (istream &in,Angajat_cu_ziua &a)
{
char aux[30];
cout<<"\ntimpdelucru: ";
in>>a.timpdelucru;
cout<<"\nangajat_acum";
in>>a.angajat_acum;
cout<<"\nnume: ";
in>>aux;
a.nume=new char[strlen(aux)+1];
strcpy(a.nume, aux);
cout<<"\nsalariul: ";
in>>a.salariu;
cout<<"\nvarsta: ";
in>>a.varsta;
cout<<"\nCNP: ";
in>>aux;
a.CNP=new char[strlen(aux)+1];
strcpy(a.CNP, aux);
return in;

}
istream &operator>> (istream &in, Angajatinacord &a)
{
char aux[30];
cout<<"\nfunctie: ";
in>>aux;
a.functie=new char[strlen(aux)+1];
strcpy(a.functie, aux);
cout<<"\nexperienta: ";
in>>a.experienta;
cout<<"\nnume: ";
in>>aux;
a.nume=new char[strlen(aux)+1];
strcpy(a.nume, aux);
cout<<"\nsalariul: ";
in>>a.salariu;
cout<<"\nvarsta: ";
in>>a.varsta;
cout<<"\nCNP: ";
in>>aux;
a.CNP=new char[strlen(aux)+1];
strcpy(a.CNP, aux);
return in;
}

//CLASA TEMPLATE
template<class T>
class firma
{private:
T* departament;
int nr_departament;
public:
int get_nr_departament()
{
return nr_departament;
}
void set_nr_departament(int val)
{
nr_departamet=val;
}

//constructor cu parametrii
firma(int n=0)
{
this->nr_departament=n;
if (n==0)
{ this->departament=NULL;}
else
this->departament=new T[n];
}

//constructor de copiere
firma (firma & F)
{
this->nr_departament=F.nr_departament;
this->departament=new T [this->nr_departament];
for(int i=0; i<this->nr_departament; i++)
this->departament[i]=F.departament[i];
}
//destructor
~firma()
{
delete[] departament;
}
//supraincarcare operator "="
firma & operator=(firma & F)
{
if(this->departament)
delete[] this->departament;
this->nr_departament=F.nr_departament;
this->departament=new T[this->nr_departament];
for(int i=0; i<this->nr_departament; i++)
this->departament[i]=F.departament[i];
}
};
void scrieInFisier(vector<Angajatinacord> vectorAA, vector<Angajat_cu_ziua> vect
orAZ){
fstream fisier ("Angajati.txt",ios::out);
fisier<<"\n
Angajati in acord: \n";
for (Angajatinacord a:vectorAA){
fisier<<a;
}
fisier<<"\n
Angajati cu ziua: \n";
for (Angajat_cu_ziua a:vectorAZ){
fisier<<a;
}
fisier.close();
}
void main()
{
vector<Angajat> vectorAngajati;
vector<Angajatinacord> vectorAngajatiInAcord;
vector<Angajat_cu_ziua> vectorAngajatiCuZiua;
int nr_ang, nr_ang_acord, nr_ang_ziua;
Angajatinacord aa;
Angajat_cu_ziua az;
cout<<"Scrieti cati angajati in acord doriti sa aveti: ";
cin>>nr_ang_acord;
for(int i=0;i<nr_ang_acord;i++){
cin>>aa;

vectorAngajatiInAcord.push_back(aa);
}
cout<<"Scrieti cati angajati cu ziua doriti sa aveti: ";
cin>>nr_ang_ziua;
for(int i=0;i<nr_ang_ziua;i++){
cin>>az;
vectorAngajatiCuZiua.push_back(az);
}
scrieInFisier(vectorAngajatiInAcord,vectorAngajatiCuZiua);
Angajat_cu_ziua a;
cin>>a;
cout<<a;
Angajatinacord j;
cin>>j;
cout<<j;
_getch();
}

Anda mungkin juga menyukai