LABORATORIO DE PROGRAMACIÓN DIGITAL 2
GUIA 03 - Herencia en C++ (Parte 1)
Departamento Académico de Ing. Informática
1. Introducción
En la presente guía aprenderemos cómo definir la herencia de clases en C++ y cómo utilizar dichas
clases en una aplicación.
2. Ejemplo de herencia de clases y su aplicación
Crear un archivo con el nombre cPersona.h que contendrá los atributos y métodos de la clase
cPersona.
#ifndef CPERSONA_H // Si CPERSONA_H no está definido
#define CPERSONA_H // Definir CPERSONA_H
#include <iostream>
#include <string>
using namespace std;
class cPersona
{
protected: // ATRIBUTOS
string aAP;
string aAM;
string aNombres;
string aDNI;
// MÉTODOS
public:
// ******************************** Constructores *******************************
cPersona()
{
aAP = "";
aAM = "";
aNombres = "";
aDNI = "";
}
cPersona(string pAP, string pAM, string pNombres, string pDNI)
{
aAP = pAP;
aAM = pAM;
aNombres = pNombres;
aDNI = pDNI;
}
// ****************************** Métodos Get y Set *******************************
// ----------------------------------------------------------------
string GetAP()
{
return aAP;
}
// ----------------------------------------------------------------
void SetAP(string pAP)
{
aAP = pAP;
}
// ----------------------------------------------------------------
string GetAM()
{
return aAM;
}
// ----------------------------------------------------------------
void SetAM(string pAM)
{
aAM = pAM;
}
// ----------------------------------------------------------------
string GetNombres()
{
return aNombres;
}
// ----------------------------------------------------------------
void SetNombres(string pNombres)
{
aNombres = pNombres;
}
// ----------------------------------------------------------------
string GetDNI()
{
return aDNI;
}
// ----------------------------------------------------------------
void SetDNI(string pDNI)
{
aDNI = pDNI;
}
// **************************** Métodos de Proceso *******************************
// ----------------------------------------------------------------
virtual void LeerDatosPersona()
{
cout << "Apellido Paterno: ";
getline(cin, aAP);
cout << "Apellido Materno: ";
getline(cin, aAM);
cout << "Nombres: ";
getline(cin, aNombres);
cout << "DNI: ";
getline(cin, aDNI);
}
// ----------------------------------------------------------------
virtual void MostrarDatosPersona()
{
cout << "Apellido Paterno: " << aAP << endl;
cout << "Apellido Materno: " << aAM << endl;
cout << "Nombres: " << aNombres << endl;
cout << "DNI: " << aDNI << endl;
}
// ----------------------------------------------------------------
virtual void Leer()
{
cout << endl;
cout << "DATOS DE PERSONA" << endl;
cout << "===============" << endl;
LeerDatosPersona();
}
// ----------------------------------------------------------------
virtual void Mostrar()
{
cout << endl;
cout << "DATOS DE PERSONA" << endl;
cout << "===============" << endl;
MostrarDatosPersona();
}
// ----------------------------------------------------------------
virtual void Escribir()
{
cout << aDNI << aAP << aAM << aNombres << endl;
}
};
#endif
Luego, crear otro archivo con el nombre cAlumno.h que contendrá los atributos y métodos de la
clase cAlumno y que además va a heredar los atributos y métodos de la clase cPersona.
#include <iostream>
#include <string>
#include "cPersona.h"
using namespace std;
/* **************** DEFINIR LA CLASE **************** */
class cAlumno : public cPersona
{
protected: // ATRIBUTOS
string aCodigo;
string aEscuelaProf;
public: // MÉTODOS
// ******************************** Constructores *******************************
cAlumno() : cPersona()
{
aCodigo = "";
aEscuelaProf = "";
}
cAlumno(string pCodigo, string pAP, string pAM, string pNombres, string pDNI, string
pEscuelaProf)
{
aCodigo = pCodigo;
aAP = pAP;
aAM = pAM;
aNombres = pNombres;
aDNI = pDNI;
aEscuelaProf = pEscuelaProf;
}
// ****************************** Métodos Get y Set *******************************
// ----------------------------------------------------------------
string GetCodigo()
{
return aCodigo;
}
// ----------------------------------------------------------------
void SetCodigo(string pCodigo)
{
aCodigo = pCodigo;
}
// ----------------------------------------------------------------
string GetEscuelaProf()
{
return aEscuelaProf;
}
// ----------------------------------------------------------------
void SetEscuelaProf(string pEscuelaProf)
{
aEscuelaProf = pEscuelaProf;
}
// *************************** Métodos de Proceso *******************************
// ----------------------------------------------------------------
void LeerDatosAlumno()
{
cout << "Codigo: ";
getline(cin, aCodigo);
LeerDatosPersona();
cout << "Escuela Profesional: ";
getline(cin, aEscuelaProf);
}
// ----------------------------------------------------------------
void MostrarDatosAlumno()
{
cout << "Codigo: " << aCodigo << endl;
MostrarDatosPersona();
cout << "Escuela Profesional: " << aEscuelaProf << endl;
}
// ----------------------------------------------------------------
void Leer() override
{
cout << endl;
cout << "DATOS DE ALUMNO" << endl;
cout << "===============" << endl;
LeerDatosAlumno();
}
// ----------------------------------------------------------------
void Mostrar() override
{
cout << endl;
cout << "DATOS DE ALUMNO" << endl;
cout << "===============" << endl;
MostrarDatosAlumno();
}
// ----------------------------------------------------------------
void Escribir() override
{
cout << aCodigo << aAP << aAM << aNombres << aEscuelaProf << endl;
}
};
Ahora vamos a crear un archivo con el nombre [Link] que contendrá una
aplicación para manejar los arreglos de alumnos y docentes.
#include <iostream>
#include <string>
#include "cPersona.h"
#include "cAlumno.h"
#include "cDocente.h"
using namespace std;
void MostrarAlumnos(int N, cAlumno** AA, string Escuela)
{
for (int K = 0; K < N; K++)
if (AA[K]->GetEscuelaProf() == Escuela)
AA[K]->Mostrar();
}
void MostrarDocentes(int N, cDocente** AD, string Departamento)
{
for (int K = 0; K < N; K++)
if (AD[K]->GetDpto() == Departamento)
AD[K]->Mostrar();
}
int main()
{
// -- Crear arreglo de alumnos
int NA = 0;
cAlumno** AA = new cAlumno * [500];
// -- Crear arreglo de docentes
int ND = 0;
cDocente** AD = new cDocente * [50];
// -- Agregar objetos alumno al arreglo de alumnos
AA[NA++] = new cAlumno("200147", "PAZ", "GUERRA", "ANGEL", "23234545", "IN");
AA[NA++] = new cAlumno("190020", "CUSI", "MEZA", "ANA", "60457812", "IL");
AA[NA++] = new cAlumno("200871", "DIAZ", "ORÉ", "EVA", "23117723", "IN");
AA[NA++] = new cAlumno("200988", "CUNO", "MAR", "JUAN", "44886033", "CO");
AA[NA++] = new cAlumno("180589", "PINO", "PUMA", "RINA", "40775689", "IN");
// -- Agregar objetos docente al arreglo de docentes
AD[ND++] = new cDocente("15487", "BUENO", "BAEZ", "CARLA", "23117245", "IF", "PR");
AD[ND++] = new cDocente("12457", "PAEZ", "MOYA", "DAVID", "60945257", "ME", "AU");
AD[ND++] = new cDocente("13886", "DIAZ", "FELIX", "JORGE", "40215623", "IF", "PR");
AD[ND++] = new cDocente("15022", "CUMPA", "NUÑEZ", "ZOILA", "44058603", "IF", "AS");
AD[ND++] = new cDocente("18473", "ZEA", "PUMA", "LEO", "40137289", "IL", "PR");
// -- Mostrar alumnos de IN
MostrarAlumnos(NA, AA, "IN");
MostrarDocentes(ND, AD, "IF");
system("PAUSE");
}
3. Ejercicios
a. Entender y ejecutar el ejemplo de la sección 2, además agregar la clase cDocente.h
desarrollado en clases de teoría.
b. Una empresa de alquiler de vehículos desea automatizar sus procesos, para lo cual el área de
informática de la empresa le encarga a Ud. implementar lo siguiente:
● La clase cVehiculo con los siguientes atributos: Placa, Marca, Modelo, Color y Año.
● La clase cVehiculoCarga heredera de la clase cVehiculo y con los siguientes atributos
adicionales: PesoBruto y CargaUtil.
● La clase cVehiculoPasajeros heredera de la clase cVehiculo y con el siguiente atributo
adicional: NroPasajeros
c. Adicionalmente, se le pide implementar una aplicación qué permita crear un arreglo con objetos
de la clase cVehiculoCarga y otro con objetos de la clase cVehiculoPasajeros.
4. Evaluación
Criterio Max. Puntaje Puntaje Obtenido
Ejercicio 3.a Explica 4
Ejercicio 3.b Resuelve + Explica 10
Ejercicio 3.c Resuelve + Explica 6
Total
5. Referencias
Curso de C++
[Link]