La herencia es uno de los pilares fundamentales de la Programación Orientada a Objetos (POO). Permite crear nuevas clases basadas en clases existentes, facilitando la reutilización de código y la creación de jerarquías de clases.
Conceptos Clave
- Clase Base (Superclase o Clase Padre): La clase de la cual se heredan propiedades y métodos.
- Clase Derivada (Subclase o Clase Hija): La clase que hereda propiedades y métodos de la clase base.
- Herencia Simple: Una clase derivada hereda de una sola clase base.
- Herencia Múltiple: Una clase derivada hereda de más de una clase base (C++ soporta herencia múltiple).
- Visibilidad de Herencia: Controla cómo se heredan los miembros de la clase base (pública, protegida, privada).
Sintaxis Básica
class ClaseBase { public: int atributo; void metodo() { // Código del método } }; class ClaseDerivada : public ClaseBase { // ClaseDerivada hereda de ClaseBase };
En este ejemplo, ClaseDerivada
hereda el atributo atributo
y el método metodo
de ClaseBase
.
Ejemplo Práctico
Vamos a crear un ejemplo práctico para ilustrar la herencia en C++.
Clase Base: Animal
#include <iostream> using namespace std; class Animal { public: void comer() { cout << "El animal está comiendo." << endl; } };
Clase Derivada: Perro
class Perro : public Animal { public: void ladrar() { cout << "El perro está ladrando." << endl; } };
Uso de las Clases
int main() { Perro miPerro; miPerro.comer(); // Método heredado de Animal miPerro.ladrar(); // Método de Perro return 0; }
Explicación del Código
- Clase Animal: Define un método
comer
. - Clase Perro: Hereda de
Animal
y añade un métodoladrar
. - Función main: Crea un objeto
miPerro
de la clasePerro
, que puede usar tanto el métodocomer
(heredado) como el métodoladrar
.
Herencia Múltiple
C++ permite la herencia múltiple, donde una clase puede heredar de más de una clase base.
Ejemplo de Herencia Múltiple
class Mamifero { public: void amamantar() { cout << "El mamífero está amamantando." << endl; } }; class Volador { public: void volar() { cout << "El volador está volando." << endl; } }; class Murcielago : public Mamifero, public Volador { // Murcielago hereda de Mamifero y Volador };
Uso de la Clase Murcielago
int main() { Murcielago miMurcielago; miMurcielago.amamantar(); // Método heredado de Mamifero miMurcielago.volar(); // Método heredado de Volador return 0; }
Ejercicio Práctico
Ejercicio 1: Crear una Jerarquía de Clases
- Clase Base:
Vehiculo
- Atributo:
velocidad
- Método:
mover()
- Atributo:
- Clase Derivada:
Coche
- Atributo:
marca
- Método:
acelerar()
- Atributo:
Solución
#include <iostream> using namespace std; class Vehiculo { public: int velocidad; void mover() { cout << "El vehículo se está moviendo a " << velocidad << " km/h." << endl; } }; class Coche : public Vehiculo { public: string marca; void acelerar() { velocidad += 10; cout << "El coche " << marca << " ha acelerado a " << velocidad << " km/h." << endl; } }; int main() { Coche miCoche; miCoche.velocidad = 50; miCoche.marca = "Toyota"; miCoche.mover(); miCoche.acelerar(); return 0; }
Explicación del Ejercicio
- Clase Vehiculo: Define un atributo
velocidad
y un métodomover
. - Clase Coche: Hereda de
Vehiculo
, añade un atributomarca
y un métodoacelerar
. - Función main: Crea un objeto
miCoche
de la claseCoche
, establece la velocidad y la marca, y llama a los métodosmover
yacelerar
.
Conclusión
La herencia es una herramienta poderosa en la POO que permite la reutilización de código y la creación de jerarquías de clases. En este módulo, hemos aprendido los conceptos básicos de la herencia, cómo implementarla en C++, y hemos visto ejemplos prácticos y ejercicios para reforzar el aprendizaje. En el próximo módulo, exploraremos el polimorfismo, otro pilar fundamental de la POO.
Curso de Programación en C++
Módulo 1: Introducción a C++
- Introducción a C++
- Configuración del Entorno de Desarrollo
- Sintaxis y Estructura Básica
- Variables y Tipos de Datos
- Entrada y Salida
Módulo 2: Estructuras de Control
Módulo 3: Funciones
- Introducción a las Funciones
- Parámetros de Función y Tipos de Retorno
- Sobrecarga de Funciones
- Recursión
Módulo 4: Arreglos y Cadenas
- Introducción a los Arreglos
- Arreglos Multidimensionales
- Introducción a las Cadenas
- Manipulación de Cadenas
Módulo 5: Punteros y Referencias
- Introducción a los Punteros
- Aritmética de Punteros
- Punteros y Arreglos
- Referencias
- Asignación Dinámica de Memoria
Módulo 6: Programación Orientada a Objetos
- Introducción a la POO
- Clases y Objetos
- Constructores y Destructores
- Herencia
- Polimorfismo
- Encapsulación y Abstracción
Módulo 7: Temas Avanzados
- Plantillas
- Manejo de Excepciones
- Entrada/Salida de Archivos
- Biblioteca Estándar de Plantillas (STL)
- Expresiones Lambda
- Multihilo