Salt la conținutul principal
Modulul 6 · Lecția 1 din 213/18 în curs~12 min
Lecții din modul (1/2)

Moștenirea în C++

Moștenirea este unul dintre pilonii cheie ai programării orientate pe obiecte (OOP). Permite unei clase noi (numită clasă derivată sau copil) să moștenească membri (atribute și metode) dintr-o clasă existentă (numită clasă de bază sau părinte), promovând reutilizarea codului.

Sintaxa de bază

În C++, moștenirea este specificată folosind operatorul : după numele clasei derivate, urmat de un specificator de acces (de obicei public) și numele clasei de bază.

C++
class Shape {
public:
    void setColor(std::string c) {
        color = c;
    }
protected:
    std::string color; // Accessible by derived classes
};

// Rectangle inherits publicly from Shape
class Rectangle : public Shape {
public:
    double getArea() {
        return width * height;
    }
private:
    double width {0.0};
    double height {0.0};
};

Specificator de acces: protected

Împreună cu public și private, moștenirea introduce specificatorul protected:

  • private membrii clasei de bază sunt nu accesibili direct din clasa derivată.
  • protected membrii clasei de bază sunt inaccesibili din exterior, dar sunt accesibili direct în interiorul claselor derivate.

Inițializarea clasei de bază

Constructorii nu sunt moșteniți automat. La instanțierea unei clase derivate, constructorul clasei de bază este apelat mai întâi. Dacă clasa de bază necesită argumente, trebuie să o invocăm în mod explicit în lista de inițializare de membri a constructorului derivat.

C++
class Parent {
public:
    Parent(int x) {
        std::cout << "Parent: " << x << std::endl;
    }
};

class Child : public Parent {
public:
    // Explicit call to Parent constructor
    Child(int x, int y) : Parent(x) {
        std::cout << "Child: " << y << std::endl;
    }
};

Încercați-l singur

Exercițiu#cpp.m6.l1.e1
Încercări: 0Se încarcă…

Creați o clasă Dog care moștenește public din clasa Animal. Clasa Dog trebuie să includă o metodă publică play() care afișează „Playing” folosind std::cout.

Se încarcă editorul...
Afișează indiciu

Utilizați sintaxa `:` urmată de `public Animal` pentru a extinde clasa de bază, apoi scrieți metoda `play()`.

Soluție disponibilă după 3 încercări

Exercițiu#cpp.m6.l1.e2
Încercări: 0Se încarcă…

Completați clasa Mașină moștenind de la Vehicul. Scrieți un constructor pentru Car care acceptă std::string b și îl transmite constructorului Vehicle prin lista de inițializare a membrilor.

Se încarcă editorul...
Afișează indiciu

În constructorul `Car`, utilizați sintaxa `: Vehicle(b)` imediat după parantezele parametrilor pentru a delega inițializarea mărcii clasei de bază.

Soluție disponibilă după 3 încercări