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
Animaly añade un métodoladrar. - Función main: Crea un objeto
miPerrode 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
velocidady un métodomover. - Clase Coche: Hereda de
Vehiculo, añade un atributomarcay un métodoacelerar. - Función main: Crea un objeto
miCochede la claseCoche, establece la velocidad y la marca, y llama a los métodosmoveryacelerar.
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
