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++
course content

Contenuti del Corso

OOP in C++

OOP in C++

1. Fondamenti della OOP in C++
2. Costruttori e Distruttori
3. Panoramica sull'Incapsulamento
4. Panoramica sull'Ereditarietà
5. Panoramica sul Polimorfismo

book
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

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

course content

Contenuti del Corso

OOP in C++

OOP in C++

1. Fondamenti della OOP in C++
2. Costruttori e Distruttori
3. Panoramica sull'Incapsulamento
4. Panoramica sull'Ereditarietà
5. Panoramica sul Polimorfismo

book
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

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