Universidad Técnica de Oruro
Facultad Nacional de Ingeniería
Ingeniería de Sistemas e Ingeniería Informática
METODOLOGÍA DE LA PROGRAMACIÓN II
Guía de Laboratorio # 5
HERENCIA EN PROGRAMACIÓN ORIENTADA A OBJETOS EN C++
Objetivos
• Comprender el concepto de herencia en C++.
• Definir y utilizar clases base y derivadas.
• Implementar herencia simple y múltiple.
• Aplicar modificadores de acceso en el contexto de herencia.
Fundamento Teórico
La herencia es un mecanismo fundamental en la Programación Orientada a Objetos que permite
crear nuevas clases basadas en clases existentes. Las clases derivadas heredan los atributos y
métodos de las clases base, promoviendo la reutilización del código y una jerarquía lógica en la
estructura de las clases.
0.1 Clases Base y Derivadas
Una clase base es aquella que se utiliza como base para crear otras clases. Una clase derivada
es la que hereda de la clase base. La herencia se declara utilizando la palabra clave public,
protected o private.
# include < iostream >
# include < string >
class Animal {
public :
void comer () {
std :: cout << " El animal e s t comiendo . " << std :: endl ;
}
};
class Perro : public Animal {
public :
void ladrar () {
Made in LATEX Ing. Erwin Saul Serrudo Condori 1
Universidad Técnica de Oruro
Facultad Nacional de Ingeniería
Ingeniería de Sistemas e Ingeniería Informática
std :: cout << " Guau ! " << std :: endl ;
}
};
int main () {
Perro miPerro ;
miPerro . comer () ; // Llamada al m t o d o heredado
miPerro . ladrar () ; // Llamada al m t o d o de la clase derivada
return 0;
}
En este ejemplo, Perro es una clase derivada de Animal. En la función main, se crea un objeto
miPerro que puede utilizar el método comer() heredado de Animal y también tiene su propio
método ladrar().
0.2 Herencia Múltiple
C++ permite la herencia múltiple, donde una clase puede heredar de más de una clase base.
class Ave {
public :
void volar () {
std :: cout << " La ave e s t volando . " << std :: endl ;
}
};
class Gato {
public :
void maullar () {
std :: cout << " Miau ! " << std :: endl ;
}
};
class GatoVolador : public Ave , public Gato {
// La clase GatoVolador hereda de Ave y Gato
};
int main () {
GatoVolador miGatoVolador ;
miGatoVolador . volar () ; // Llamada al m t o d o de Ave
miGatoVolador . maullar () ; // Llamada al m t o d o de Gato
return 0;
}
0.3 Modificadores de Acceso en Herencia
Los modificadores de acceso determinan cómo se pueden acceder a los miembros de la clase base
desde la clase derivada.
Made in LATEX Ing. Erwin Saul Serrudo Condori 2
Universidad Técnica de Oruro
Facultad Nacional de Ingeniería
Ingeniería de Sistemas e Ingeniería Informática
class Base {
protected :
int valor ;
};
class Derivada : public Base {
public :
void establecerValor ( int v ) {
valor = v ; // Acceso permitido
}
};
int main () {
Derivada obj ;
obj . establecerValor (10) ;
return 0;
}
0.4 Sobrescritura de Métodos
Las clases derivadas pueden sobrescribir los métodos de la clase base para proporcionar una im-
plementación específica.
class Vehiculo {
public :
virtual void mover () {
std :: cout << " El v e h c u l o se mueve . " << std :: endl ;
}
};
class Coche : public Vehiculo {
public :
void mover () override {
std :: cout << " El coche avanza . " << std :: endl ;
}
};
int main () {
Coche miCoche ;
miCoche . mover () ; // Llamada al m t o d o sobrescrito
return 0;
}
Made in LATEX Ing. Erwin Saul Serrudo Condori 3
Universidad Técnica de Oruro
Facultad Nacional de Ingeniería
Ingeniería de Sistemas e Ingeniería Informática
Actividades de Aula
A continuación, se presentan diez actividades prácticas para reforzar el entendimiento de la herencia
en C++:
1. Actividad 1: Definición de Clases
• Crear una clase base Persona y una clase derivada Estudiante. La clase Estudiante
debe tener un atributo adicional para la carrera.
2. Actividad 2: Métodos Sobrescritos
• Definir una clase base Animal con un método hacerSonido(). Crear clases derivadas
Gato y Perro que sobrescriban este método.
3. Actividad 3: Herencia Múltiple
• Crear una clase base Estudiante y una clase base Empleado. Definir una clase derivada
EstudianteEmpleado que herede de ambas.
4. Actividad 4: Modificadores de Acceso
• Implementar una clase base Cuenta con un atributo protegido. Crear una clase derivada
CuentaAhorro que pueda acceder a este atributo.
5. Actividad 5: Métodos Virtuales
• Definir una clase base Figura con un método virtual area(). Crear clases derivadas
Cuadrado y Rectangulo que implementen este método.
6. Actividad 6: Constructor de Clases Derivadas
• Crear una clase base Empleado con un constructor. Definir una clase derivada Gerente
que llame al constructor de Empleado.
7. Actividad 7: Uso de protected
• Crear una clase base Vehiculo con un atributo marca protegido. Crear una clase
derivada Moto que inicialice este atributo.
8. Actividad 8: Uso de override
• Definir una clase base Transporte con un método virtual transportar(). Crear una
clase derivada Bicicleta que sobrescriba este método.
9. Actividad 9: Polimorfismo en Herencia
• Implementar una clase base Forma con un método virtual dibujar(). Crear clases
derivadas y utilizar un puntero de la clase base para llamar a dibujar().
10. Actividad 10: Ejemplo Completo
Made in LATEX Ing. Erwin Saul Serrudo Condori 4
Universidad Técnica de Oruro
Facultad Nacional de Ingeniería
Ingeniería de Sistemas e Ingeniería Informática
• Diseñar un sistema simple de gestión de empleados que incluya clases base y derivadas,
como Empleado, Gerente y Interno. Implementar métodos relevantes y mostrar su
uso.
Conclusión
La herencia es un concepto esencial en la Programación Orientada a Objetos en C++. Permite la
creación de jerarquías de clases que facilitan la reutilización del código y una mejor organización
del software. Comprender cómo funcionan las clases base y derivadas, así como los modificadores
de acceso, es clave para diseñar sistemas eficientes.
Made in LATEX Ing. Erwin Saul Serrudo Condori 5