Está en la página 1de 3

#include <string.

h> #include <iostream> using namespace std; class Puesto{ char *denominacion; int nivel; public: Puesto(); void setDatos(char *denom, int *niv); virtual void imprime(); //agreg 1 ~Puesto(){delete [] denominacion;} //agreg 3 Puesto(const Puesto &other); const Puesto &operator=(const Puesto &other); }; ////PRIMER Puesto::Puesto(){ denominacion=0; nivel=1; } void Puesto::setDatos(char *den, int *niv) { if(denominacion)delete [] denominacion; denominacion=new char[strlen(den)+1]; strcpy(denominacion, den); nivel = *niv; if(nivel<1)nivel=1; if(nivel>30)nivel=30; } void Puesto::imprime(){ std::cout<<denominacion<<" nivel "<<nivel; } //SEGUNDO enum Contrato{LABORAL_FIJO, LABORAL_TEMPORAL, EMPRESA_SERVICIOS, FUNCIONARIO}; class Persona{ Contrato contrato; string nombre; string apellido; public: Persona(char *nom, char *apell){ setNombreApellido(nom,apell); contrato=LABORAL_FIJO; } void setNombreApellido(char *nom, char *apell){ nombre=nom; apellido=apell; } void setContrato(Contrato cont){contrato=cont;} Contrato getContrato(){return contrato;} void getNombreApellido(string &nom, string &apel){ nom=nombre; apel=apellido; } //agreg 4 void imprimeContrato() { switch(contrato){ case LABORAL_FIJO: cout<<"laboral fijo";break;

case LABORAL_TEMPORAL: cout<<"laboral temporal"; break; case EMPRESA_SERVICIOS: cout<<"empresa de servicios"; br eak; case FUNCIONARIO: cout<<"funcionario"; break; } } void imprime(){ cout<<nombre.c_str()<<" "<<apellido.c_str()<<" es "; imprimeContrato(); } }; //TERCERO Puesto::Puesto(const Puesto &other):denominacion(0) { (*this)=other; } const Puesto &Puesto::operator=(const Puesto &other) { if(&other==this)return *this; delete [] denominacion; denominacion = new char [strlen(other.denominacion)+1]; strcpy(denominacion,other.denominacion); nivel=other.nivel; return *this; } //CUARTO class Nombramiento{ Puesto *puesto; Persona *persona; public: Nombramiento(Puesto *pu, Persona *pe){ puesto=pu; persona=pe; } void imprime(){ persona->imprime(); cout<<" Puesto: "; puesto->imprime(); } }; //QUINTO enum Cargo{DIRECTOR, SUBDIRECTOR, SECRETARIO}; class PuestoEspecial:public Puesto{ Cargo cargo; public: void setCargo(Cargo cargo){this->cargo=cargo;} virtual void imprime(){ Puesto::imprime(); cout<<" y es "; imprimeCargo(); } void imprimeCargo(){ switch(cargo){ case DIRECTOR: cout<<"director";break; case SUBDIRECTOR: cout<<"subdirector"; break; case SECRETARIO: cout<<"secretario"; break; }

} }; //SEXTO void main() { Persona *plantilla[3]; plantilla[0]=new Persona("Juan", "Jimenez"); plantilla[0]->setContrato(LABORAL_FIJO); plantilla[1]=new Persona("Marisa", "Jimenez"); plantilla[1]->setContrato(FUNCIONARIO); plantilla[2]=new Persona("Antonio", "Jimenez"); plantilla[2]->setContrato(LABORAL_FIJO); int v=24; Puesto puesto1; puesto1.setDatos("A1",&v); PuestoEspecial puesto2; puesto2.setDatos("Profesor",&v); puesto2.setCargo(SECRETARIO); Nombramiento *nombramientos[3]; for(int i=0;i<3;i++){ char a; cout<<"seleccione a o b:"; cin>>a; if(a=='a')nombramientos[i]=new Nombramiento(&puesto1,plantilla[i ]); else nombramientos[i]=new Nombramiento(&puesto2,plantilla[i]); } for(int j=0;j<3;j++){ cout<<endl; nombramientos[j]->imprime(); } getchar(); getchar(); }

También podría gustarte