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
1234567class 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
123456789#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
12345class 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
123456#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!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Mi faccia domande su questo argomento
Riassuma questo capitolo
Mostri esempi dal mondo reale
Awesome!
Completion rate improved to 3.13
Ereditarietà Multipla
Scorri per mostrare il menu
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
1234567class 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
123456789#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
12345class 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
123456#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!