Contenido del Curso
POO en C++
POO en C++
Herencia Múltiple
La herencia múltiple permite que una clase derivada herede de varias clases base. Esto significa que una sola clase derivada puede acceder a los miembros (datos y funciones) de múltiples clases base, combinando efectivamente sus atributos y comportamientos.
Herencia múltiple horizontal
En este tipo de herencia múltiple, una clase hereda propiedades y métodos de múltiples superclases al mismo nivel en la jerarquía de herencia. Considere las classes
: Shape
y Color
, cada una con propiedades y métodos distintos. Shape
define la forma de un objeto y Color
define su color.
Shape.h
Color.h
class Shape { public: void setShape(const std::string& value) { shape = value; } std::string getShape() { return shape; } private: std::string shape; };
Ahora, creemos una subclase llamada ColoredShape
que hereda propiedades y métodos de ambas clases Shape
y Color
.
ColoredShape.h
#include "Shape.h" #include "Color.h" class ColoredShape : public Shape, public Color { public: void describe() { std::cout << "This object is a " << getShape() << " shape and is " << getColor() << '\n'; } };
Herencia vertical
En la herencia en profundidad, una class
hereda propiedades y métodos de su progenitor directo y sus ancestros, formando una cadena de herencia. Por ejemplo, considere la class
Vehicle
, que puede servir como base para la herencia de Car
, Truck
y otros. En nuestro ejemplo, utilizaremos Car
para ilustrar el concepto.
Vehicle.h
Car.h
class Vehicle { public: void start() { std::cout << "Vehicle started"; } void stop() { std::cout << "Vehicle stopped"; } };
Ahora, para lograr la herencia vertical, es necesario establecer una jerarquía donde una class
herede de otra, y luego una clase subsiguiente herede de la primera, y así sucesivamente. Podemos crear un ElectricCar
que herede todas las propiedades y funcionalidades de Car
, que a su vez hereda de Vehicle
, estableciendo así una estructura de herencia múltiple compleja.
ElectricCar.h
#include "Car.h" class ElectricCar : public Car { public: void charge() { std::cout << "Electric car is charging"; } };
Por qué se necesita la herencia múltiple
La herencia múltiple proporciona flexibilidad y reutilización de código en situaciones donde una class
necesita exhibir comportamientos o características de más de una class
padre. A continuación, se presentan algunos escenarios donde la herencia múltiple es beneficiosa:
Roles del mundo real: un pájaro volador puede combinar características tanto de las clases
Flying
comoBird
, representando ambas habilidades. La claseFlying
también puede aplicarse a aviones u otros objetos voladores.Reutilización de código: la herencia múltiple permite que una clase reutilice características de diferentes clases base sin duplicación.
Interfaces enfocadas: fomenta la combinación de interfaces pequeñas y específicas en lugar de utilizar una sola interfaz grande y general.
Dividir un objeto complejo en otros más simples y utilizar la herencia múltiple para crear software flexible y mantenible.
¡Gracias por tus comentarios!