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

  1. Clase Base (Superclase o Clase Padre): La clase de la cual se heredan propiedades y métodos.
  2. Clase Derivada (Subclase o Clase Hija): La clase que hereda propiedades y métodos de la clase base.
  3. Herencia Simple: Una clase derivada hereda de una sola clase base.
  4. Herencia Múltiple: Una clase derivada hereda de más de una clase base (C++ soporta herencia múltiple).
  5. 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

  1. Clase Animal: Define un método comer.
  2. Clase Perro: Hereda de Animal y añade un método ladrar.
  3. Función main: Crea un objeto miPerro de la clase Perro, que puede usar tanto el método comer (heredado) como el método ladrar.

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

  1. Clase Base: Vehiculo
    • Atributo: velocidad
    • Método: mover()
  2. Clase Derivada: Coche
    • Atributo: marca
    • Método: acelerar()

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

  1. Clase Vehiculo: Define un atributo velocidad y un método mover.
  2. Clase Coche: Hereda de Vehiculo, añade un atributo marca y un método acelerar.
  3. Función main: Crea un objeto miCoche de la clase Coche, establece la velocidad y la marca, y llama a los métodos mover y acelerar.

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.

© Copyright 2024. Todos los derechos reservados