C CE EN NTTR RO OS SU UP PE ER RIIO OR RS SU UP PE ER RIIO OR RD DE EA ALLTTA A E S P E C I A L I Z A C I Ó N Y A S E S O R Í A ESPECIALIZACIÓN Y ASESORÍA http://www.cfape.com P PR RO OG GR RA AM MA AC CIIÓ ÓN NE EN N LLA AP PLLA ATTA AFFO OR RM MA AW WIIN ND DO OW WS S http://www.cfape.com/ P P R O G R A M A C Ó N E N C C N V E A V A N Z A D O C U R S O O N N E PR RO OG GR RA AM MA AC CIIIÓ ÓN NE EN NC C///C C++++++ N NIIIV VE ELLL A AV VA AN NZ ZA AD DO O (((C CU UR RS SO OO ON N---LLLIIIN NE E))) OBJETIVOS Escribir programas orientado a objetos aplicando herencia simple y múltiple. Escribir programas orientado a objetos aplicando polimorfismo. LABORATORIO 2 Msc. Walter Fernandez Toglio. POO: HERENCIA Y POLIMORFISMO 1 C CE EN NTTR RO OS SU UP PE ER RIIO OR RS SU UP PE ER RIIO OR RD DE EA ALLTTA A E S P E C I A L I Z A C I Ó N Y A S E S O R Í A ESPECIALIZACIÓN Y ASESORÍA http://www.cfape.com P PR RO OG GR RA AM MA AC CIIÓ ÓN NE EN N LLA AP PLLA ATTA AFFO OR RM MA AW WIIN ND DO OW WS S http://www.cfape.com/ P P R O G R A M A C Ó N E N C C N V E A V A N Z A D O C U R S O O N N E PR RO OG GR RA AM MA AC CIIIÓ ÓN NE EN NC C///C C++++++ N NIIIV VE ELLL A AV VA AN NZ ZA AD DO O (((C CU UR RS SO OO ON N---LLLIIIN NE E))) TEMAS Herencia(public, private, protected) Polimorfismo(métodos virtuales) SOFTWARE NECESARIO Dev-C++ 4.9.9.2 http://sourceforge.net/projects/dev-cpp/files/Binaries/ NetBeans IDE C/C++ http://netbeans.org/features/cpp/ Code::Blocks http://www.codeblocks.org/downloads/26 Eclipse C++ http://www.eclipse.org/downloads/packages/eclipse-ide-ccdevelopers-includes-incubating-components/indigosr1 Visual C++ http://www.microsoft.com/visualstudio/eng/products/visual-studioexpress-products Borland C++ http://edn.embarcadero.com/article/20633 Msc. Walter Fernandez Toglio. 2 C CE EN NTTR RO OS SU UP PE ER RIIO OR RS SU UP PE ER RIIO OR RD DE EA ALLTTA A E S P E C I A L I Z A C I Ó N Y A S E S O R Í A ESPECIALIZACIÓN Y ASESORÍA http://www.cfape.com P PR RO OG GR RA AM MA AC CIIÓ ÓN NE EN N LLA AP PLLA ATTA AFFO OR RM MA AW WIIN ND DO OW WS S http://www.cfape.com/ P P R O G R A M A C Ó N E N C C N V E A V A N Z A D O C U R S O O N N E PR RO OG GR RA AM MA AC CIIIÓ ÓN NE EN NC C///C C++++++ N NIIIV VE ELLL A AV VA AN NZ ZA AD DO O (((C CU UR RS SO OO ON N---LLLIIIN NE E))) MARCO TEÓRICO Documentación y ejercicios del documento de teoría. Msc. Walter Fernandez Toglio. 3 C CE EN NTTR RO OS SU UP PE ER RIIO OR RS SU UP PE ER RIIO OR RD DE EA ALLTTA A E S P E C I A L I Z A C I Ó N Y A S E S O R Í A ESPECIALIZACIÓN Y ASESORÍA http://www.cfape.com P PR RO OG GR RA AM MA AC CIIÓ ÓN NE EN N LLA AP PLLA ATTA AFFO OR RM MA AW WIIN ND DO OW WS S http://www.cfape.com/ P P R O G R A M A C Ó N E N C C N V E A V A N Z A D O C U R S O O N N E PR RO OG GR RA AM MA AC CIIIÓ ÓN NE EN NC C///C C++++++ N NIIIV VE ELLL A AV VA AN NZ ZA AD DO O (((C CU UR RS SO OO ON N---LLLIIIN NE E))) ACTIVIDADES Analizar y explicar el funcionamiento de .cada uno de los ejemplos. EJEMPLO 1 Implemente en C++ la siguiente jerarquía de clases: SOLUCIÓN #include <iostream> #include <stdlib.h> using namespace std; class Barco { private: char nombre[30]; float peso; public: void LeerDatosBarco(); void EscribirDatosBarco(); //Constructores y demás funciones básicas de barco }; void Barco::LeerDatosBarco() { cout<<endl<<endl<<"***Datos Barco***"; Msc. Walter Fernandez Toglio. 4 C CE EN NTTR RO OS SU UP PE ER RIIO OR RS SU UP PE ER RIIO OR RD DE EA ALLTTA A E S P E C I A L I Z A C I Ó N Y A S E S O R Í A ESPECIALIZACIÓN Y ASESORÍA http://www.cfape.com P PR RO OG GR RA AM MA AC CIIÓ ÓN NE EN N LLA AP PLLA ATTA AFFO OR RM MA AW WIIN ND DO OW WS S http://www.cfape.com/ P P R O G R A M A C Ó N E N C C N V E A V A N Z A D O C U R S O O N N E PR RO OG GR RA AM MA AC CIIIÓ ÓN NE EN NC C///C C++++++ N NIIIV VE ELLL A AV VA AN NZ ZA AD DO O (((C CU UR RS SO OO ON N---LLLIIIN NE E))) cout<<endl<<"Nombre: "; cin>>nombre; cout<<endl<<"Peso: "; cin>>peso; } void Barco::EscribirDatosBarco() { cout<<endl<<endl<<"***Datos Barco***"; cout<<endl<<"Nombre: "; cout<<nombre; cout<<endl<<"Peso: "; cout<<peso; } class Carguero: public Barco { // Esta es la manera de especificar que hereda de Barco private: float carga; //El resto de cosas public: void LeerDatosCarguero(); void EscribirDatosCarguero(); }; void Carguero::LeerDatosCarguero() { cout<<endl<<"***Datos Carguero***"; LeerDatosBarco(); cout<<endl<<"Carga: "; cin>>carga; } void Carguero::EscribirDatosCarguero() { EscribirDatosBarco(); cout<<endl<<"***Datos Carguero***"; cout<<endl<<"Carga: "; cout<<carga; } class Acorazado: public Barco { private: int numeroArmas; int Soldados; // Elresto de cosas public: void LeerDatosAcorazado(); void EscribirDatosAcorazado(); }; void Acorazado::LeerDatosAcorazado() { cout<<endl<<"***Datos Acorazado"; this->LeerDatosBarco(); cout<<endl<<"Numero de Armas: "; cin>>numeroArmas; cout<<endl<<"Soldados: "; Msc. Walter Fernandez Toglio. 5 C CE EN NTTR RO OS SU UP PE ER RIIO OR RS SU UP PE ER RIIO OR RD DE EA ALLTTA A E S P E C I A L I Z A C I Ó N Y A S E S O R Í A ESPECIALIZACIÓN Y ASESORÍA http://www.cfape.com P PR RO OG GR RA AM MA AC CIIÓ ÓN NE EN N LLA AP PLLA ATTA AFFO OR RM MA AW WIIN ND DO OW WS S http://www.cfape.com/ P P R O G R A M A C Ó N E N C C N V E A V A N Z A D O C U R S O O N N E PR RO OG GR RA AM MA AC CIIIÓ ÓN NE EN NC C///C C++++++ N NIIIV VE ELLL A AV VA AN NZ ZA AD DO O (((C CU UR RS SO OO ON N---LLLIIIN NE E))) cin>>Soldados; } void Acorazado::EscribirDatosAcorazado() { EscribirDatosBarco(); cout<<endl<<"***Datos Acorazado***"; cout<<endl<<"Numero de Armas: "; cout<<numeroArmas; cout<<endl<<"Soldados: "; cout<<Soldados; } int main(void) { Carguero *ObjCar=new Carguero; Acorazado *ObjAcor=new Acorazado; ObjCar->LeerDatosCarguero(); ObjCar->EscribirDatosCarguero(); ObjAcor->LeerDatosAcorazado(); ObjAcor->EscribirDatosAcorazado(); system("PAUSE"); return 1; } Msc. Walter Fernandez Toglio. 6 C CE EN NTTR RO OS SU UP PE ER RIIO OR RS SU UP PE ER RIIO OR RD DE EA ALLTTA A E S P E C I A L I Z A C I Ó N Y A S E S O R Í A ESPECIALIZACIÓN Y ASESORÍA http://www.cfape.com P PR RO OG GR RA AM MA AC CIIÓ ÓN NE EN N LLA AP PLLA ATTA AFFO OR RM MA AW WIIN ND DO OW WS S http://www.cfape.com/ P P R O G R A M A C Ó N E N C C N V E A V A N Z A D O C U R S O O N N E PR RO OG GR RA AM MA AC CIIIÓ ÓN NE EN NC C///C C++++++ N NIIIV VE ELLL A AV VA AN NZ ZA AD DO O (((C CU UR RS SO OO ON N---LLLIIIN NE E))) EJEMPLO 2 Escriba un programa con una clase padre que contenga el nombre, calle, ciudad, estado y código postal, y clases derivadas que añadan información sobre el kilometraje acumulado en una línea aérea y en la renta de autos. # include <iostream.h> # include <string.h> char cr; class cliente { private: char nombre [60]; calle [60]; ciudad [20]; provincia [15]; c_postal [10]; public: void salida_datos( void ); void entrada_datos( void ); }; class linea_aerea: public cliente { private: char tipo_linea_aerea[20]; float kms_vuelo_acum; public: void cliente_linea_aerea( ); void escribe_kms_volados( ); }; class renta_de_autos: public cliente { char tipo_renta_de_autos[20]; float kms_auto_acum; public: void cliente_renta_de_autos( ); void escribe_kms_rodados( ); }; SOLUCIÓN # include <iostream> # include <string.h> using namespace std; class cliente { private: char nombre [60]; char rcalle [60]; char ciudad [20]; char provincia [15]; char c_postal [10]; public: void salida_datos( void ); void entrada_datos( void ); }; Msc. Walter Fernandez Toglio. 7 C CE EN NTTR RO OS SU UP PE ER RIIO OR RS SU UP PE ER RIIO OR RD DE EA ALLTTA A E S P E C I A L I Z A C I Ó N Y A S E S O R Í A ESPECIALIZACIÓN Y ASESORÍA http://www.cfape.com P PR RO OG GR RA AM MA AC CIIÓ ÓN NE EN N LLA AP PLLA ATTA AFFO OR RM MA AW WIIN ND DO OW WS S http://www.cfape.com/ P P R O G R A M A C Ó N E N C C N V E A V A N Z A D O C U R S O O N N E PR RO OG GR RA AM MA AC CIIIÓ ÓN NE EN NC C///C C++++++ N NIIIV VE ELLL A AV VA AN NZ ZA AD DO O (((C CU UR RS SO OO ON N---LLLIIIN NE E))) void cliente::entrada_datos() { fflush(stdin); cout<<endl; cout<<"________________________________________________"<<endl; cout<<endl<<"Nombre: "; cin>>nombre; fflush(stdin); cout<<endl<<"calle: "; gets(rcalle); cout<<endl<<"Ciudad: "; cin>>this->ciudad; cout<<endl<<"Provincia: "; cin>>this->provincia; cout<<endl; cout<<"________________________________________________"<<endl; } void cliente::salida_datos() { cout<<endl; cout<<"________________________________________________"<<endl; cout<<endl<<"Nombre: "<<nombre; cout<<endl<<"calle: "<<rcalle; cout<<endl<<"Ciudad: "<<this->ciudad; cout<<endl<<"Provincia: "<<this->provincia; cout<<endl; cout<<"________________________________________________"<<endl; } class linea_aerea: public cliente { private: char tipo_linea_aerea[20]; float kms_vuelo_acum; public: void cliente_linea_aerea( ); void escribe_kms_volados( ); }; void linea_aerea::cliente_linea_aerea() { this->entrada_datos(); cout<<endl; cout<<"________________________________________________"<<endl; cout<<endl<<"Tipo linea aerea: "; cin>>tipo_linea_aerea; cout<<endl<<"Kms acumulados: "; cin>>this->kms_vuelo_acum; cout<<endl; cout<<"________________________________________________"<<endl; } void linea_aerea::escribe_kms_volados() { cout<<endl; this->salida_datos(); cout<<"________________________________________________"<<endl; Msc. Walter Fernandez Toglio. 8 C CE EN NTTR RO OS SU UP PE ER RIIO OR RS SU UP PE ER RIIO OR RD DE EA ALLTTA A E S P E C I A L I Z A C I Ó N Y A S E S O R Í A ESPECIALIZACIÓN Y ASESORÍA http://www.cfape.com P PR RO OG GR RA AM MA AC CIIÓ ÓN NE EN N LLA AP PLLA ATTA AFFO OR RM MA AW WIIN ND DO OW WS S http://www.cfape.com/ P P R O G R A M A C Ó N E N C C N V E A V A N Z A D O C U R S O O N N E PR RO OG GR RA AM MA AC CIIIÓ ÓN NE EN NC C///C C++++++ N NIIIV VE ELLL A AV VA AN NZ ZA AD DO O (((C CU UR RS SO OO ON N---LLLIIIN NE E))) cout<<endl<<"Kms acumulados: "<<this->kms_vuelo_acum; cout<<endl; cout<<"________________________________________________"<<endl; } class renta_de_autos: public cliente { char tipo_renta_de_autos[20]; float kms_auto_acum; public: void cliente_renta_de_autos( ); void escribe_kms_rodados( ); }; int main() { linea_aerea x; x.cliente_linea_aerea(); x.escribe_kms_volados(); system("pause"); } Msc. Walter Fernandez Toglio. 9 C CE EN NTTR RO OS SU UP PE ER RIIO OR RS SU UP PE ER RIIO OR RD DE EA ALLTTA A E S P E C I A L I Z A C I Ó N Y A S E S O R Í A ESPECIALIZACIÓN Y ASESORÍA http://www.cfape.com P PR RO OG GR RA AM MA AC CIIÓ ÓN NE EN N LLA AP PLLA ATTA AFFO OR RM MA AW WIIN ND DO OW WS S http://www.cfape.com/ P P R O G R A M A C Ó N E N C C N V E A V A N Z A D O C U R S O O N N E PR RO OG GR RA AM MA AC CIIIÓ ÓN NE EN NC C///C C++++++ N NIIIV VE ELLL A AV VA AN NZ ZA AD DO O (((C CU UR RS SO OO ON N---LLLIIIN NE E))) EJEMPLO 3 En este ejercicio debe tratar de implementar la clase MiString, la cual permite utilizar de manera más intuitiva las cadenas. Es importante que haga bien este ejercicio porque le servirá para el ejercicio 3. //MiString.h class MiString { private: char *str; //cadena public: MiString(); MiString(char *t); ~MiString(){ delete [] str; } //destructor friend istream &operator>>(istream &ci, MiString &s); friend ostream &operator<<(ostream &co, MiString &s); char operator[](int i); bool operator==(char*t); void operator=(char *t); //sobrecarga int GetLen(){ return strlen(str); } }; Se deben sobrecargar los siguientes operadores: De inserción << y de extracción >> para poder pedir el texto e imprimirlo. Operador == para comparar con una cadena de texto. El operador [ ] para poder acceder directamente a un elemento de la cadena. //main.cpp void main() { MiString cs; while(1) { cout << "\nDar una frase:?"; cin >> cs; cout << "La frase al reves es:"; for (int i=cs.GetLen()-1; i>=0;i--) { cout<<cs[i]; } cout << "\nDesea Salir? SI o NO:?"; MiString cs1; cin >> cs1; if (cs1 == "SI") break; } cout << "\nAdios.."<<endl; } SOLUCIÓN //MiString.h #include<iostream> using namespace std; class MiString { private: char *str; //cadena public: Msc. Walter Fernandez Toglio. 10 C CE EN NTTR RO OS SU UP PE ER RIIO OR RS SU UP PE ER RIIO OR RD DE EA ALLTTA A E S P E C I A L I Z A C I Ó N Y A S E S O R Í A ESPECIALIZACIÓN Y ASESORÍA http://www.cfape.com P PR RO OG GR RA AM MA AC CIIÓ ÓN NE EN N LLA AP PLLA ATTA AFFO OR RM MA AW WIIN ND DO OW WS S http://www.cfape.com/ P P R O G R A M A C Ó N E N C C N V E A V A N Z A D O C U R S O O N N E PR RO OG GR RA AM MA AC CIIIÓ ÓN NE EN NC C///C C++++++ N NIIIV VE ELLL A AV VA AN NZ ZA AD DO O (((C CU UR RS SO OO ON N---LLLIIIN NE E))) MiString(); MiString(char *t); ~MiString() { delete [] str; } //destructor friend istream &operator>>(istream &ci, MiString &s); friend ostream &operator<<(ostream &co, MiString &s); char operator[](int i); bool operator==(char*t); void operator=(char *t); //sobrecarga void operator=(MiString &s); //sobrecarga int GetLen() { return strlen(str); } }; MiString::MiString() { } MiString::MiString(char *t) { str=new char[60]; strcpy(str,t); } ostream &operator<<(ostream &os,MiString &c) { os << c.str; return os; } istream &operator>>(istream &is,MiString &c) { cout << "Escriba un nombre: " <<endl; //is >> c.str; fflush(stdin); gets(c.str); return is; } bool MiString::operator ==(char *t) { return (strcmp(this->str, t)==0); } void MiString::operator =(char *t) { strcpy(this->str, t); } void MiString::operator =(MiString &s) { strcpy(this->str, s.str); } int main() { MiString obj("SANDRA TERESA"); cout<<endl<< obj <<endl; Msc. Walter Fernandez Toglio. 11 C CE EN NTTR RO OS SU UP PE ER RIIO OR RS SU UP PE ER RIIO OR RD DE EA ALLTTA A E S P E C I A L I Z A C I Ó N Y A S E S O R Í A ESPECIALIZACIÓN Y ASESORÍA http://www.cfape.com P PR RO OG GR RA AM MA AC CIIÓ ÓN NE EN N LLA AP PLLA ATTA AFFO OR RM MA AW WIIN ND DO OW WS S http://www.cfape.com/ P P R O G R A M A C Ó N E N C C N V E A V A N Z A D O C U R S O O N N E PR RO OG GR RA AM MA AC CIIIÓ ÓN NE EN NC C///C C++++++ N NIIIV VE ELLL A AV VA AN NZ ZA AD DO O (((C CU UR RS SO OO ON N---LLLIIIN NE E))) cout<<endl<<"Longitud: "<<obj.GetLen()<<endl; cin>>obj; cout<<endl<< obj <<endl; cout<<endl<<"Longitud: "<<obj.GetLen()<<endl; MiString obj2("TERESA"); //if(obj=="TERESA") if(obj.operator ==("TERESA")) { cout<<endl<<"Iguales"; } else { cout<<endl<<"No iguales"; } obj="ALBERTO"; cout<<endl<<obj; cout<<endl<<"Longitud: "<<obj.GetLen()<<endl; ///////////////////////////////////////////////////////////////// /* if(obj==obj2) { cout<<endl<<"Iguales"; } else { cout<<endl<<"No iguales"; } */ obj2="UTP"; obj=obj2; cout<<endl<<obj; cout<<endl<<"Longitud: "<<obj.GetLen()<<endl; system("pause"); return 1; } Msc. Walter Fernandez Toglio. 12 C CE EN NTTR RO OS SU UP PE ER RIIO OR RS SU UP PE ER RIIO OR RD DE EA ALLTTA A E S P E C I A L I Z A C I Ó N Y A S E S O R Í A ESPECIALIZACIÓN Y ASESORÍA http://www.cfape.com P PR RO OG GR RA AM MA AC CIIÓ ÓN NE EN N LLA AP PLLA ATTA AFFO OR RM MA AW WIIN ND DO OW WS S http://www.cfape.com/ P P R O G R A M A C Ó N E N C C N V E A V A N Z A D O C U R S O O N N E PR RO OG GR RA AM MA AC CIIIÓ ÓN NE EN NC C///C C++++++ N NIIIV VE ELLL A AV VA AN NZ ZA AD DO O (((C CU UR RS SO OO ON N---LLLIIIN NE E))) EJERCICIOS 1 Escriba un programa con una clase padre que contenga el nombre, calle, ciudad, estado y código postal, y clases derivadas que añadan información sobre el kilometraje acumulado en una línea aérea y en la renta de autos. # include <iostream.h> # include <string.h> char cr; class cliente { private: char nombre [60]; calle [60]; ciudad [20]; provincia [15]; c_postal [10]; public: void salida_datos( void ); void entrada_datos( void ); }; class linea_aerea: public cliente { private: char tipo_linea_aerea[20]; float kms_vuelo_acum; public: void cliente_linea_aerea( ); void escribe_kms_volados( ); }; class renta_de_autos: public cliente { char tipo_renta_de_autos[20]; float kms_auto_acum; public: void cliente_renta_de_autos( ); void escribe_kms_rodados( ); }; Msc. Walter Fernandez Toglio. 13 C CE EN NTTR RO OS SU UP PE ER RIIO OR RS SU UP PE ER RIIO OR RD DE EA ALLTTA A E S P E C I A L I Z A C I Ó N Y A S E S O R Í A ESPECIALIZACIÓN Y ASESORÍA http://www.cfape.com P PR RO OG GR RA AM MA AC CIIÓ ÓN NE EN N LLA AP PLLA ATTA AFFO OR RM MA AW WIIN ND DO OW WS S http://www.cfape.com/ P P R O G R A M A C Ó N E N C C N V E A V A N Z A D O C U R S O O N N E PR RO OG GR RA AM MA AC CIIIÓ ÓN NE EN NC C///C C++++++ N NIIIV VE ELLL A AV VA AN NZ ZA AD DO O (((C CU UR RS SO OO ON N---LLLIIIN NE E))) 2 En este ejercicio debe tratar de implementar la clase MiString, la cual permite utilizar de manera más intuitiva las cadenas. Es importante que haga bien este ejercicio porque le servirá para el ejercicio 3. //MiString.h class MiString { private: char *str; //cadena public: MiString(); MiString(char *t); ~MiString(){ delete [] str; } //destructor friend istream &operator>>(istream &ci, MiString &s); friend ostream &operator<<(ostream &co, MiString &s); char operator[](int i); bool operator==(char*t); void operator=(char *t); //sobrecarga int GetLen(){ return strlen(str); } }; Se deben sobrecargar los siguientes operadores: De inserción << y de extracción >> para poder pedir el texto e imprimirlo. Operador == para comparar con una cadena de texto. El operador [ ] para poder acceder directamente a un elemento de la cadena. //main.cpp void main() { MiString cs; while(1) { cout << "\nDar una frase:?"; cin >> cs; cout << "La frase al reves es:"; for (int i=cs.GetLen()-1; i>=0;i--) { cout<<cs[i]; } cout << "\nDesea Salir? SI o NO:?"; MiString cs1; cin >> cs1; if (cs1 == "SI") break; } cout << "\nAdios.."<<endl; } Msc. Walter Fernandez Toglio. 14 C CE EN NTTR RO OS SU UP PE ER RIIO OR RS SU UP PE ER RIIO OR RD DE EA ALLTTA A E S P E C I A L I Z A C I Ó N Y A S E S O R Í A ESPECIALIZACIÓN Y ASESORÍA http://www.cfape.com P PR RO OG GR RA AM MA AC CIIÓ ÓN NE EN N LLA AP PLLA ATTA AFFO OR RM MA AW WIIN ND DO OW WS S http://www.cfape.com/ P P R O G R A M A C Ó N E N C C N V E A V A N Z A D O C U R S O O N N E PR RO OG GR RA AM MA AC CIIIÓ ÓN NE EN NC C///C C++++++ N NIIIV VE ELLL A AV VA AN NZ ZA AD DO O (((C CU UR RS SO OO ON N---LLLIIIN NE E))) 3 Diseñar la siguiente jerarquia de clases: Nota. Para los atributos que son cadena de caracteres se debe usar la clase MiString para la extracción, inserción, asignación. Ecriba un programa que manipule la jerarquia de clases, lea un objeto de cada clase y visualice. (Utilizando Funciones virtuales) Empleado.h #include <iostream> using namespace std; class empleado { protected : MiString nombre; long salario; public: empleado(char*, long); void display() {cout << "Nada\n";} }; class directivo : public empleado { private: MiString titulo; public: directivo(char*, long, char*); void display() { cout << " El directivo " << nombre << " gana " << salario<< " y tiene el titulo de " << titulo << endl; } }; Msc. Walter Fernandez Toglio. 15 C CE EN NTTR RO OS SU UP PE ER RIIO OR RS SU UP PE ER RIIO OR RD DE EA ALLTTA A E S P E C I A L I Z A C I Ó N Y A S E S O R Í A ESPECIALIZACIÓN Y ASESORÍA http://www.cfape.com P PR RO OG GR RA AM MA AC CIIÓ ÓN NE EN N LLA AP PLLA ATTA AFFO OR RM MA AW WIIN ND DO OW WS S http://www.cfape.com/ P P R O G R A M A C Ó N E N C C N V E A V A N Z A D O C U R S O O N N E PR RO OG GR RA AM MA AC CIIIÓ ÓN NE EN NC C///C C++++++ N NIIIV VE ELLL A AV VA AN NZ ZA AD DO O (((C CU UR RS SO OO ON N---LLLIIIN NE E))) class operario : public empleado { protected: MiString puesto; public: operario(char*, long, char*); void display() { cout << " El operario " << nombre << " gana " << salario<< " y ocupa un puesto de " << puesto << endl; } }; class tecnico : public operario { public: tecnico(char*, long, char*); void display() { cout << " El tecnico " << nombre<< " gana " << salario<< " y ocupa un puesto de "<< puesto << endl; } }; class oficial : public operario { public: oficial(char*, long, char*); void display() { cout << " El oficial " << nombre<< " gana " << salario<< " y ocupa un puesto de "<< puesto << endl; } }; Empleado.cpp // Fichero Empleos.cpp // funciones miembro de clases Directivo y Operario #include "Empleos.h" #include <iostream> #include <string.h> using namespace std; // definición de los constructores empleado::empleado(char* name = "", long sueldo = 0): salario(sueldo) { strcpy(nombre, name); } directivo::directivo(char* name = "", long sueldo = 0,char* title = "") : empleado( , ) { strcpy(titulo, title); } Msc. Walter Fernandez Toglio. 16 C CE EN NTTR RO OS SU UP PE ER RIIO OR RS SU UP PE ER RIIO OR RD DE EA ALLTTA A E S P E C I A L I Z A C I Ó N Y A S E S O R Í A ESPECIALIZACIÓN Y ASESORÍA http://www.cfape.com P PR RO OG GR RA AM MA AC CIIÓ ÓN NE EN N LLA AP PLLA ATTA AFFO OR RM MA AW WIIN ND DO OW WS S http://www.cfape.com/ P P R O G R A M A C Ó N E N C C N V E A V A N Z A D O C U R S O O N N E PR RO OG GR RA AM MA AC CIIIÓ ÓN NE EN NC C///C C++++++ N NIIIV VE ELLL A AV VA AN NZ ZA AD DO O (((C CU UR RS SO OO ON N---LLLIIIN NE E))) operario::operario(char* name = "", long sueldo = 0,char* job = "") : empleado( , ) { strcpy( , ); } tecnico::tecnico(char* name = "", long sueldo = 0,char* job ="") : operario( , , ) { ; } oficial::oficial(char* name = "", long sueldo = 0,char* job ="") : operario( , , ) { ; } Empresa,cpp // fichero empresa.cpp // utilización de la clase empleos #include <iostream> #include "Empleos.h" using namespace std; void main(void) { // punteros a objetos de distintas clases directivo *m; operario *j; oficial *k; tecnico *i; // creación de cuatro objetos de distintas clases m = new directivo("Maria", 260000, "Ingeniera"); j = new operario("Juan", 160000, "Soldador"); k = new oficial("Koldo", 180000, "Teniente"); i = new tecnico("Ignacio", 250000, "Ingeniero"); // vector de punteros a la clase base empleado *lista[8]; // se guardan direcciones de objetos de // distintas clases lista[0] = m; lista[1] = j; lista[2] = k; lista[3] = i; lista[4] = new directivo("PEDRO", 2500000, "Economista"); lista[5] = new operario("Leire", 25000, "Becaria"); lista[6] = new oficial("Jon", 1500000, "Entrenador"); lista[7] = new tecnico("Mario", 1600000, "Electricista"); // Se tratan todos los objetos de las distintas clases de una forma unificada for (int ii=0; ii<8; ii++) lista[ii]->display(); cout << "Ya he terminado." << endl; system("pause"); } Msc. Walter Fernandez Toglio. 17 C CE EN NTTR RO OS SU UP PE ER RIIO OR RS SU UP PE ER RIIO OR RD DE EA ALLTTA A E S P E C I A L I Z A C I Ó N Y A S E S O R Í A ESPECIALIZACIÓN Y ASESORÍA http://www.cfape.com P PR RO OG GR RA AM MA AC CIIÓ ÓN NE EN N LLA AP PLLA ATTA AFFO OR RM MA AW WIIN ND DO OW WS S http://www.cfape.com/ P P R O G R A M A C Ó N E N C C N V E A V A N Z A D O C U R S O O N N E PR RO OG GR RA AM MA AC CIIIÓ ÓN NE EN NC C///C C++++++ N NIIIV VE ELLL A AV VA AN NZ ZA AD DO O (((C CU UR RS SO OO ON N---LLLIIIN NE E))) 4 Implementar una jerarquia de herencia de animales tal que contenga al menos seis niveles de derivación y doce clases. Ejemplo (Animales, Vertebrados, Invertebrados, Mamíferos, Anfibios, Aves, Reptiles etc. ) Condición Usar clases abstractas 5 Dada las siguientes jerarquía de clases Haga las correciones necesarias del siguiente código: #include <iostream> #include <string.h> using namespace std; class empleado { private: char nombre[31]; public: empleado(); empleado(const char *nom); char *devolver_nombre(); Msc. Walter Fernandez Toglio. 18 C CE EN NTTR RO OS SU UP PE ER RIIO OR RS SU UP PE ER RIIO OR RD DE EA ALLTTA A E S P E C I A L I Z A C I Ó N Y A S E S O R Í A ESPECIALIZACIÓN Y ASESORÍA http://www.cfape.com P PR RO OG GR RA AM MA AC CIIÓ ÓN NE EN N LLA AP PLLA ATTA AFFO OR RM MA AW WIIN ND DO OW WS S http://www.cfape.com/ P P R O G R A M A C Ó N E N C C N V E A V A N Z A D O C U R S O O N N E PR RO OG GR RA AM MA AC CIIIÓ ÓN NE EN NC C///C C++++++ N NIIIV VE ELLL A AV VA AN NZ ZA AD DO O (((C CU UR RS SO OO ON N---LLLIIIN NE E))) float calcular_pago() {return 0.0;} }; class subcontratado : public empleado { private: float tarifa; float no_horas; public: subcontratado(const char *nom); void fijar_tarifa(float tar); void contar_horas(float horas); float calcular_pago(); }; // constructor para la clase subcontratado subcontratado::subcontratado(const char *nom): empleado(nom) { tarifa = 0.0; no_horas = 0.0; }; class vendedor : public subcontratado { private: float comision; float ventas_realizadas; public: vendedor(const char *nom); void fijar_comision(float com); void contar_ventas(float ventas); float calcular_pago(); }; class encargado : public empleado { private: float sueldo_mensual; public: encargado(const char *nom); void fijar_sueldo(float sueldo); float calcular_pago(); }; float subcontratado::calcular_pago() { return tarifa * no_horas; }; float vendedor::calcular_pago() { return (subcontratado::calcular_pago() + comision * ventas_realizadas); }; Msc. Walter Fernandez Toglio. 19 C CE EN NTTR RO OS SU UP PE ER RIIO OR RS SU UP PE ER RIIO OR RD DE EA ALLTTA A E S P E C I A L I Z A C I Ó N Y A S E S O R Í A ESPECIALIZACIÓN Y ASESORÍA http://www.cfape.com P PR RO OG GR RA AM MA AC CIIÓ ÓN NE EN N LLA AP PLLA ATTA AFFO OR RM MA AW WIIN ND DO OW WS S http://www.cfape.com/ P P R O G R A M A C Ó N E N C C N V E A V A N Z A D O C U R S O O N N E PR RO OG GR RA AM MA AC CIIIÓ ÓN NE EN NC C///C C++++++ N NIIIV VE ELLL A AV VA AN NZ ZA AD DO O (((C CU UR RS SO OO ON N---LLLIIIN NE E))) float encargado::calcular_pago() { return sueldo_mensual; }; int main() { system("pause"); return 1; } UIna vez corregido el programa anterior agregue la siguiente clase: class encargado_ventas : public encargado, public vendedor { ... // definición de variables y funciones miembro }; Nota. Analizar lo siguiente: class subcontratado : public virtual empleado {...}; class encargado : public virtual empleado {...}; Msc. Walter Fernandez Toglio. 20 C CE EN NTTR RO OS SU UP PE ER RIIO OR RS SU UP PE ER RIIO OR RD DE EA ALLTTA A E S P E C I A L I Z A C I Ó N Y A S E S O R Í A ESPECIALIZACIÓN Y ASESORÍA http://www.cfape.com P PR RO OG GR RA AM MA AC CIIÓ ÓN NE EN N LLA AP PLLA ATTA AFFO OR RM MA AW WIIN ND DO OW WS S http://www.cfape.com/ P P R O G R A M A C Ó N E N C C N V E A V A N Z A D O C U R S O O N N E PR RO OG GR RA AM MA AC CIIIÓ ÓN NE EN NC C///C C++++++ N NIIIV VE ELLL A AV VA AN NZ ZA AD DO O (((C CU UR RS SO OO ON N---LLLIIIN NE E))) 6 Se desea desarrollar un sistema de contabilidad para una empresa de televisión por cable que atienda los siguientes requisitos: El sistema debe almacenar el nombre, dirección, número de teléfono y descuentos aplicables a cada uno de sus clientes. Un cliente puede tener más de una cuenta ya que es posible tener contratado el servicio en distintos domicilios de una misma persona, pero una cuenta sólo es de un cliente. El sistema debe almacenar la información relativa a los servicios estándar que ofrece la empresa y los precios de dichos servicios. Una cuenta activa implica el abono del cliente al paquete básico de servicios. Cada cliente puede elegir servicios adicionales para una de sus cuentas, lo que obligará al sistema a almacenar la fecha de suscripción a cada servicio adicional y la fecha baja en el mismo. Un servicio generalmente se refiere a un paquete de canales. Es imprescindible almacenar información sobre las peticiones de eventos de pago por visión (pay per view), así como los eventos disponibles en cada momento. La empresa puede cargar en la cuenta del cliente conceptos extraodinarios como la instalación o el alquiler de algún elemento hardware propiedad de la empresa como el decodificador o similares. De igual forma, al cliente se le pueden realizar ingresos excepcionales en su cuenta como resultado de aplicarle promociones o como consecuencia de interrupciones en el servicio. El sistema almacenará información sobre los cobros a clientes (fecha de envío de la carta que informa al cliente sobre el inminente cargo en su cuenta, cantidad en pesetas y fecha de vencimiento) y sobre los ingresos (fecha, cantidad y método de pago). Para ver cómo se realiza el paso del diagrama a la implementación, vamos a profundizar en la funcionalidad que dice que deberá ser posible conocer el saldo de cada una de las cuentas de los Msc. Walter Fernandez Toglio. 21 C CE EN NTTR RO OS SU UP PE ER RIIO OR RS SU UP PE ER RIIO OR RD DE EA ALLTTA A E S P E C I A L I Z A C I Ó N Y A S E S O R Í A ESPECIALIZACIÓN Y ASESORÍA http://www.cfape.com P PR RO OG GR RA AM MA AC CIIÓ ÓN NE EN N LLA AP PLLA ATTA AFFO OR RM MA AW WIIN ND DO OW WS S http://www.cfape.com/ P P R O G R A M A C Ó N E N C C N V E A V A N Z A D O C U R S O O N N E PR RO OG GR RA AM MA AC CIIIÓ ÓN NE EN NC C///C C++++++ N NIIIV VE ELLL A AV VA AN NZ ZA AD DO O (((C CU UR RS SO OO ON N---LLLIIIN NE E))) clientes de la empresa, y realizar un listado de las cuentas del cliente que refleje la situación actual de cada una. class Cliente { char *nombre, *direccion, *telefono; char *DNI; int numCuentas; Cuenta * misCuentas; //array de cuentas, debido a que no será normal tener más de 2 public: Cliente(char *, char *, char *, char *); void ListarCuentas(); }; class ListaClientes: public Lista { long numClientes; Cliente * primerCliente; public: ListaClientes(); Cliente* BuscarCliente(char *); }; Cliente* ListaClientes::BuscarCliente(char *DNIBuscado) { Msc. Walter Fernandez Toglio. 22 C CE EN NTTR RO OS SU UP PE ER RIIO OR RS SU UP PE ER RIIO OR RD DE EA ALLTTA A E S P E C I A L I Z A C I Ó N Y A S E S O R Í A ESPECIALIZACIÓN Y ASESORÍA http://www.cfape.com P PR RO OG GR RA AM MA AC CIIÓ ÓN NE EN N LLA AP PLLA ATTA AFFO OR RM MA AW WIIN ND DO OW WS S http://www.cfape.com/ P P R O G R A M A C Ó N E N C C N V E A V A N Z A D O C U R S O O N N E PR RO OG GR RA AM MA AC CIIIÓ ÓN NE EN NC C///C C++++++ N NIIIV VE ELLL A AV VA AN NZ ZA AD DO O (((C CU UR RS SO OO ON N---LLLIIIN NE E))) // Operación que devuelve un puntero al cliente cuyo DNI coincide con DNIBuscado. // se trata de una sencilla búsqueda en una lista ordenada por DNI } void Cliente::ListarCuentas() { cout << nombre << “DNI: “ << DNI << endl; for (int i=0;i<numCuentas;i++) { if (!misCuentas[i].Activa()) continue; cout << “Cuenta número: “ << misCuentas[i].GetNumero() << endl; cout << “Saldo: “ << misCuentas[i].ObtenerSaldo() << endl; } } 7 Se desea desarrollar un sistema de recogida de encuestas a través de Internet. Cualquier persona desde su navegador puede inscribirse en el sistema a través de un formulario. El formulario recoge los siguientes datos obligatorios del nuevo usuario: Apellidos y Nombre, Nombre de usuario deseado para acceder al sistema, Dirección de correo electrónico, Temas en los que está interesado (seleccionando uno o más de los que se le ofrecen). Una vez validados los datos, el sistema le devuelve al usuario una palabra clave única, que le permitirá acceder al sistema, junto con el nombre de usuario. Periódicamente, el usuario recibirá mediante correo electrónico un cuestionario sobre uno de los temas que seleccionó en su inscripción. Al recibirlo, deberá rellenarlo y devolverlo al sistema también mediante el correo. A partir de todos los cuestionarios recogidos sobre un tema, el sistema publicará unos resultados estadísticos que podrán consultarse mediante una página Web. Para contestar al cuestionario el usuario marcará una (y solo una) de las cuatro respuestas propuestas a cada pregunta, pero en el futuro se permitirá también hacer preguntas de otros tipos, como selección múltiple y preguntas abiertas, y debemos acomodar nuestro análisis a esta circunstancia. Hay que tener en cuenta que el sistema deberá realizar entre otras las siguientes funcionalidades: Consultas del número de usuarios que han contestado una determinada pregunta dentro de una batería de encuestas concreta. Consultas del número de usuarios que han contestado alguna encuesta relacionada con un determinado tema. Msc. Walter Fernandez Toglio. 23 C CE EN NTTR RO OS SU UP PE ER RIIO OR RS SU UP PE ER RIIO OR RD DE EA ALLTTA A E S P E C I A L I Z A C I Ó N Y A S E S O R Í A ESPECIALIZACIÓN Y ASESORÍA http://www.cfape.com P PR RO OG GR RA AM MA AC CIIÓ ÓN NE EN N LLA AP PLLA ATTA AFFO OR RM MA AW WIIN ND DO OW WS S http://www.cfape.com/ P P R O G R A M A C Ó N E N C C N V E A V A N Z A D O C U R S O O N N E PR RO OG GR RA AM MA AC CIIIÓ ÓN NE EN NC C///C C++++++ N NIIIV VE ELLL A AV VA AN NZ ZA AD DO O (((C CU UR RS SO OO ON N---LLLIIIN NE E))) Para codificar la funcionalidad, por ejemplo, de las consultas del número de usuarios que han respondido una determinada pregunta, suponemos que existe una pantalla de consultas donde el usuario selecciona el texto de la pregunta de una lista desplegable. A partir de ahí, se busca en la lista de contestaciones asociadas a dicha pregunta y de dicha información se saca el número de encuestas en que aparece la contestación, que coincide con el número de usuarios pues una encuesta la rellena una única persona: class Encuesta { Fecha fechaRealizacion; Cuestionario * cuestionario; Contestacion * contestaciones; // será un array: el número de contestaciones es fijo public: bool HaContestadoPregunta(char *); }; class Contestacion { int numeroOrden; Encuesta * encuesta; Pregunta * pregunta; public: char * GetTextoPregunta(){ return pregunta.GetTexto();} }; bool Encuesta::HaContestadoPregunta(char * textoPregunta) { for (int i=0;i<cuestionario.GetNumPreguntas();i++) if (contestaciones[i].GetTextoPregunta() == textoPregunta) return true; return false; } NOTA: Llamo encuesta a la contestación de un cuestionario por parte del cliente, y contestación a la respuesta a una pregunta por parte de un cliente. Msc. Walter Fernandez Toglio. 24 C CE EN NTTR RO OS SU UP PE ER RIIO OR RS SU UP PE ER RIIO OR RD DE EA ALLTTA A E S P E C I A L I Z A C I Ó N Y A S E S O R Í A ESPECIALIZACIÓN Y ASESORÍA http://www.cfape.com P PR RO OG GR RA AM MA AC CIIÓ ÓN NE EN N LLA AP PLLA ATTA AFFO OR RM MA AW WIIN ND DO OW WS S http://www.cfape.com/ P P R O G R A M A C Ó N E N C C N V E A V A N Z A D O C U R S O O N N E PR RO OG GR RA AM MA AC CIIIÓ ÓN NE EN NC C///C C++++++ N NIIIV VE ELLL A AV VA AN NZ ZA AD DO O (((C CU UR RS SO OO ON N---LLLIIIN NE E))) Cuestionario es un conjunto de preguntas (sin respuesta) similar a un enunciado de un examen y respues Msc. Walter Fernandez Toglio. 25
© Copyright 2024