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
FlyingcomoBird, representando ambas habilidades. La claseFlyingtambié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!