Lezioni del modulo (1/2)
Ereditarietà in C++
L'Ereditarietà è uno dei pilastri della programmazione orientata agli oggetti (OOP). Consente a una nuova classe (chiamata classe derivata o figlia) di acquisire i membri (attributi e metodi) di una classe esistente (chiamata classe base o padre), promuovendo il riutilizzo del codice.
Sintassi di Base
In C++, si specifica l'ereditarietà usando l'operatore : dopo il nome della classe derivata, seguito dal tipo di accesso (solitamente public) e dal nome della classe base.
class Shape {
public:
void setColor(std::string c) {
color = c;
}
protected:
std::string color; // Accessibile dalle classi derivate
};
// Rectangle eredita public-mente da Shape
class Rectangle : public Shape {
public:
double getArea() {
return width * height;
}
private:
double width {0.0};
double height {0.0};
};
Specificatori di Accesso: protected
Oltre a public e private, l'ereditarietà introduce lo specificatore protected:
- I membri
privatedella classe base non sono accessibili direttamente dalla classe derivata. - I membri
protecteddella classe base sono inaccessibili dall'esterno, ma sono accessibili direttamente all'interno delle classi derivate.
Inizializzazione della Classe Base
I costruttori non vengono ereditati automaticamente. Quando si istanzia una classe derivata, viene chiamato prima il costruttore della classe base. Se la classe base richiede argomenti, dobbiamo invocarla esplicitamente nella member initializer list del costruttore derivato.
class Parent {
public:
Parent(int x) {
std::cout << "Parent: " << x << std::endl;
}
};
class Child : public Parent {
public:
// Chiamata esplicita al costruttore Parent
Child(int x, int y) : Parent(x) {
std::cout << "Child: " << y << std::endl;
}
};
Prova tu
Crea una classe Dog che eredita in modalità public dalla classe Animal. La classe Dog deve includere un metodo public play() che stampa 'Playing' tramite std::cout.
Mostra suggerimento
Usa la sintassi `:` seguito da `public Animal` per estendere la classe base, poi scrivi il metodo `play()`.
Soluzione disponibile dopo 3 tentativi
Completa la classe Car ereditando da Vehicle. Scrivi un costruttore per Car che accetta std::string b e lo passa al costruttore di Vehicle tramite la lista di inizializzazione.
Mostra suggerimento
Nel costruttore di `Car`, usa la sintassi `: Vehicle(b)` subito dopo la tonda dei parametri per delegare l'inizializzazione del brand alla classe base.
Soluzione disponibile dopo 3 tentativi