Documentos de Académico
Documentos de Profesional
Documentos de Cultura
FACULTAD DE INGENIERIA Y
ARQUITECTURA
ESCUELA DE INGENIERIA ELECTRICA
PROGRAMACION I
CICLO II / 2015
Laboratorio N° 5
Tema: “Herencia en C++”
Grupo de laboratorio:01
Integrantes:
EJEMPLO 01:
Cada vez que creemos un objeto de cualquier tipo derivado, por ejemplo de tipo
Comercial, estaremos creando en un solo objeto un Comercial, un Empleado y una
Persona. Nuestro programa puede tratar a ese objeto como si fuera cualquiera de esos
tres tipos. Es decir, nuestro comercial tendrá, además de sus propiedades como
comercial, su nómina como empleado y su nombre, edad y género como persona.
Siempre podremos crear nuevas clases para resolver nuevas situaciones. Consideremos
el caso de que en nuestra clasificación queremos incluir una nueva clase "Becario", que
no es un empleado, ni tampoco un estudiante; la derivaríamos de Persona. También
podemos considerar que un becario es ambas cosas, sería un ejemplo de derivación
múltiple, podríamos hacer que la clase derivada Becario, lo fuera de Empleado y
Estudiante.
Podemos aplicar procedimientos genéricos a una clase en concreto, por ejemplo,
podemos aplicar una subida general del salario a todos los empleados,
independientemente de su profesión, si hemos diseñado un procedimiento en la clase
empleado para ello.
#include <iostream>
#include <cstring>
using namespace std;
class Persona {
public:
Persona(char *n) { strcpy(nombre, n); }
void VerNombre() { cout << nombre << endl; }
protected:
char nombre[30];
};
class Empleado : public Persona {
public:
Empleado(char *n) : Persona(n) {}
void VerNombre() { cout << "Emp: " << nombre << endl; }
};
class Estudiante : public Persona {
public:
Estudiante(char *n) : Persona(n) {}
void VerNombre() { cout << "Est: " << nombre << endl; }
};
int main() {
Persona *Pepito = new Estudiante("Jose");
Persona *Carlos = new Empleado("Carlos");
Carlos->VerNombre();
Pepito->VerNombre();
delete Pepito;
delete Carlos;
cin.get();
return 0
;
}
Ejemplo 2
#include <iostream>
using namespace std;
class ClaseA {
public:
ClaseA() : datoA(10) { cout << "Constructor de A" << endl; }
~ClaseA() { cout << "Destructor de A" << endl; }
int LeerA() const { return datoA; }
protected:
int datoA;
};
class ClaseB : public ClaseA {
public:
ClaseB() : datoB(20) {cout << "Constructor de B" << endl; }
~ClaseB() { cout << "Destructor de B" << endl; }
int LeerB() const { return datoB; }
protected:
int datoB;
};
int main() {
ClaseB objeto;
cout << "a = " << objeto.LeerA() << ", b = " << objeto.LeerB() << endl;
cin.get();
return 0;
}
Asignación: Terminar la Clase Base Persona según se muestra en el diagrama de
jerarquías mostrado.
#include <iostream>
#include <cstring>
using namespace std;
//************************* PERSONA
**************************************
class Persona {
public:
Persona(char *, int, char *, char *);
void VerNombre();
protected:
char nombre[30], direccion[50], telefono[10];
int edad;
};
Persona::Persona(char *n, int ed, char *dir, char *tel){
strcpy(nombre, n);
edad = ed;
strcpy(direccion, dir);
strcpy(telefono, tel);
}
void Persona::VerNombre() {
cout << "Persona: " << nombre
<<"\nEdad: "<<edad
<<" años\nDireccion: "<<direccion
<<"\nTelefono: "<<telefono
<< endl;
}
//************************ EMPLEADO
***************************************
class Empleado : public Persona {
public:
Empleado(char *, int , char *, char *, char *);
void VerNombre();
protected:
char cargo[20];
};
Empleado::Empleado(char *n, int ed, char *dir, char *tel, char *car) : Persona(n, ed, dir,
tel) {
strcpy(cargo, car);
}
void Empleado::VerNombre() {
cout << "Empleado: " << nombre
<<"\nEdad: "<<edad
<<" años\nDireccion: "<<direccion
<<"\nTelefono: "<<telefono
<<"\nCargo: "<<cargo
<< endl;
}
//************************ ESTUDIANTE
*************************************
class Estudiante : public Persona {
public:
Estudiante(char *, int, char *, char *, char *);
void VerNombre();
protected:
char lugar[30];
};
Estudiante::Estudiante(char *n, int ed, char *dir, char *tel, char *lug) : Persona(n, ed,
dir, tel) {
strcpy(lugar, lug);
}
void Estudiante::VerNombre(){
cout << "Estudiante: " << nombre
<<"\nEdad: "<<edad
<<" años\nDireccion: "<<direccion
<<"\nTelefono: "<<telefono
<<"\nLugar de Est.: "<<lugar
<< endl;
}
//************************ EJECUTIVO
****************************************
class Ejecutivo : public Empleado{
public:
Ejecutivo(char *, int, char *, char *, char *, char *);
void VerNombre();
protected:
char deprt[20];
};
Ejecutivo::Ejecutivo(char *n, int ed, char *dir, char *tel, char *car, char *dep) :
Empleado(n, ed, dir, tel, car) {
strcpy(deprt, dep);
}
void Ejecutivo::VerNombre() {
cout << "Ejecutivo: " << nombre
<<"\nEdad: "<<edad
<<" años\nDireccion: "<<direccion
<<"\nTelefono: "<<telefono
<<"\nCargo: "<<cargo
<<"\nDepartamento: "<<deprt
<< endl;
}
//************************* EMPLEADO
***************************************
class Comercial : public Empleado{
public:
Comercial(char *, int , char *, char *, char *, char *);
void VerNombre();
protected:
char ruta[30];
};
Comercial::Comercial(char *n, int ed, char *dir, char *tel, char *car, char *rut) :
Empleado(n, ed, dir, tel, car) {
strcpy(ruta, rut);
}
void Comercial::VerNombre() {
cout << "Comercial: " << nombre
<<"\nEdad: "<<edad
<<" años\nDireccion: "<<direccion
<<"\nTelefono: "<<telefono
<<"\nCargo: "<<cargo
<<"\nRuta: "<<ruta
<< endl;
}
//************************* MAIN
******************************************
int main() {
Persona *Per = new Persona("Pepito Peña", 14, "El Salvador, San Salvador, Apopa",
"2136-9865");
Estudiante *Est = new Estudiante("Vicente Fernandez", 25, "Recidencial Univercitaria",
"2235-6896", "Univercidad de El Salvador");
Empleado *Emp = new Empleado("Vilma Palma", 45, "San Miguel, Santa Rosa de Lima",
"2569-9898", "Limpiesa");
Ejecutivo *Eje = new Ejecutivo("Ernesto Solorsano", 35, "San Miguel de Mercedes",
"2301-0838", "Presidente", "Relaciones Publicas");
Comercial *Com = new Comercial("Estela Echeverria", 25, "La Paz, El Salvador", "2569-
0008", "Vendedora", "Centro, S. Salvador");
cout<<'\n';
Per->VerNombre();
cout<<'\n';
Est->VerNombre();
cout<<'\n';
Emp->VerNombre();
cout<<'\n';
Eje->VerNombre();
cout<<'\n';
Com->VerNombre();
cout<<'\n';
delete Per;
delete Est;
delete Emp;
delete Eje;
delete Com;
//cin.get();
return 0;
}
Conclusión