Contenuti del Corso
OOP in C++
OOP in C++
Ereditarietà Multipla
L'ereditarietà multipla consente a una classe derivata di ereditare da più classi base. Ciò significa che una singola classe derivata può accedere ai membri (dati e funzioni) di più classi base, combinando di fatto i loro attributi e comportamenti.
Ereditarietà Multipla Orizzontale
In questo tipo di ereditarietà multipla, una classe eredita proprietà e metodi da più superclassi allo stesso livello nella gerarchia di ereditarietà. Si considerino le classes
: Shape
e Color
, ciascuna con proprietà e metodi distinti. La Shape
definisce la forma di un oggetto, mentre la Color
ne definisce il colore.
Shape.h
Color.h
class Shape { public: void setShape(const std::string& value) { shape = value; } std::string getShape() { return shape; } private: std::string shape; };
Ora, creiamo una sottoclasse chiamata ColoredShape
che eredita proprietà e metodi sia dalla classe Shape
che dalla classe 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'; } };
Ereditarietà verticale
Nell'ereditarietà in profondità, una class
eredita proprietà e metodi dal suo genitore diretto e dai suoi antenati, formando una catena di ereditarietà. Ad esempio, si consideri la class
Vehicle
, che può servire come base per l'ereditarietà di Car
, Truck
e altri. Nel nostro esempio, utilizzeremo Car
per illustrare il concetto.
Vehicle.h
Car.h
class Vehicle { public: void start() { std::cout << "Vehicle started"; } void stop() { std::cout << "Vehicle stopped"; } };
Per ottenere l'ereditarietà verticale, è necessario impostare una gerarchia in cui una class
eredita da un'altra, e una classe successiva eredita dalla prima, e così via. Possiamo creare una ElectricCar
che eredita tutte le proprietà e funzionalità dalla Car
, la quale a sua volta eredita dalla Vehicle
, stabilendo così una struttura di ereditarietà multipla complessa.
ElectricCar.h
#include "Car.h" class ElectricCar : public Car { public: void charge() { std::cout << "Electric car is charging"; } };
Perché è Necessaria l'Ereditarietà Multipla
L'ereditarietà multipla offre flessibilità e riutilizzo del codice in situazioni in cui una class
deve mostrare comportamenti o caratteristiche di più di una class
genitore. Ecco alcuni scenari in cui l'ereditarietà multipla è vantaggiosa:
Ruoli del mondo reale: un uccello volante può combinare le caratteristiche sia delle classi
Flying
cheBird
, rappresentando entrambe le abilità. La classeFlying
può essere applicata anche ad aerei o altri oggetti volanti.Riutilizzo del codice: l'ereditarietà multipla consente a una classe di riutilizzare funzionalità da diverse classi base senza duplicazione.
Interfacce focalizzate: incoraggia la combinazione di interfacce piccole e specifiche invece di utilizzarne una grande e generale.
Scomporre un oggetto complesso in oggetti più semplici e utilizzare l'ereditarietà multipla per creare software flessibile e manutenibile.
Grazie per i tuoi commenti!