Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Ereditarietà Multipla | Panoramica sull'Ereditarietà
OOP in C++

bookEreditarietà 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

Shape.h

Color.h

Color.h

copy
1234567
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

ColoredShape.h

copy
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

Vehicle.h

Car.h

Car.h

copy
12345
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

ElectricCar.h

copy
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 che Bird, rappresentando entrambe le abilità. La classe Flying 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.

Note
Nota

Scomporre un oggetto complesso in oggetti più semplici e utilizzare l'ereditarietà multipla per creare software flessibile e manutenibile.

question mark

Quale delle seguenti affermazioni sull'ereditarietà orizzontale è corretta?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 4. Capitolo 3

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Suggested prompts:

Can you provide examples of horizontal and vertical multiple inheritance?

What are some potential problems with multiple inheritance?

Can you explain the difference between multiple inheritance and single inheritance?

Awesome!

Completion rate improved to 3.13

bookEreditarietà 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

Shape.h

Color.h

Color.h

copy
1234567
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

ColoredShape.h

copy
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

Vehicle.h

Car.h

Car.h

copy
12345
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

ElectricCar.h

copy
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 che Bird, rappresentando entrambe le abilità. La classe Flying 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.

Note
Nota

Scomporre un oggetto complesso in oggetti più semplici e utilizzare l'ereditarietà multipla per creare software flessibile e manutenibile.

question mark

Quale delle seguenti affermazioni sull'ereditarietà orizzontale è corretta?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 4. Capitolo 3
some-alt