Vai al contenuto
eLearner.app
Modulo 6 · Lezione 1 di 213/18 nel corso~12 min
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.

Code
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 private della classe base non sono accessibili direttamente dalla classe derivata.
  • I membri protected della 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.

Code
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

Esercizio#cpp.m6.l1.e1
Tentativi: 0Caricamento…

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.

Caricamento editor…
Mostra suggerimento

Usa la sintassi `:` seguito da `public Animal` per estendere la classe base, poi scrivi il metodo `play()`.

Soluzione disponibile dopo 3 tentativi

Esercizio#cpp.m6.l1.e2
Tentativi: 0Caricamento…

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.

Caricamento editor…
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