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ă.
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:
privatemembrii clasei de bază sunt nu accesibili direct din clasa derivată.protectedmembrii 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.
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
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.
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
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.
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