Przejdź do głównej treści
eLearner.app
Moduł 6 · Lekcja 1 z 213/18 w kursie~12 min
Lekcje modułu (1/2)

Dziedziczenie w C++

Dziedziczenie (inheritance) to jeden z filarów programowania zorientowanego obiektowo (OOP). Umożliwia nowej klasie (zwanej klasą pochodną lub podrzędną) przejęcie składowych (atrybutów i metod) istniejącej klasy (zwanej klasą bazową lub nadrzędną), co sprzyja ponownemu użyciu kodu.

Podstawowa składnia

W C++ dziedziczenie określa się za pomocą operatora : po nazwie klasy pochodnej, po którym następuje typ dostępu (zazwyczaj public) oraz nazwa klasy bazowej.

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};
};

Specyfikatory dostępu: protected

Oprócz specyfikatorów public i private, dziedziczenie wprowadza specyfikator protected:

  • Składowe private klasy bazowej nie są bezpośrednio dostępne z poziomu klasy pochodnej.
  • Składowe protected klasy bazowej są niedostępne z zewnątrz, ale są bezpośrednio dostępne wewnątrz klas pochodnych.

Inicjalizacja klasy bazowej

Konstruktory nie są dziedziczone automatycznie. Podczas tworzenia instancji klasy pochodnej najpierw wywoływany jest konstruktor klasy bazowej. Jeśli klasa bazowa wymaga argumentów, musimy go jawnie wywołać na liście inicjalizacyjnej (member initializer list) konstruktora klasy pochodnej.

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;
    }
};

Spróbuj sam

Ćwiczenie#cpp.m6.l1.e1
Próby: 0Ładowanie...

Utwórz klasę Dog, która dziedziczy w trybie public po klasie Animal. Klasa Dog musi zawierać publiczną metodę play() wypisującą 'Playing' za pomocą std::cout.

Ładowanie edytora...
Pokaż wskazówkę

Użyj składni `:` z następującym po nim `public Animal`, aby rozszerzyć klasę bazową, a następnie napisz metodę `play()`.

Rozwiązanie dostępne po 3 próbach

Ćwiczenie#cpp.m6.l1.e2
Próby: 0Ładowanie...

Uzupełnij klasę Car, dziedzicząc po Vehicle. Napisz konstruktor dla Car, który przyjmuje std::string b i przekazuje go do konstruktora klasy Vehicle za pomocą listy inicjalizacyjnej.

Ładowanie edytora...
Pokaż wskazówkę

W konstruktorze klasy `Car` użyj składni `: Vehicle(b)` bezpośrednio po nawiasach parametrów, aby przekazać inicjalizację marki (brand) do klasy bazowej.

Rozwiązanie dostępne po 3 próbach