Menu
Coddy logo textTech

Podstawy dziedziczenia

Część sekcji Programowanie obiektowe ścieżki C++ w Coddy. Lekcja 48 z 104.

Dziedziczenie pozwala klasie przejąć właściwości i zachowania innej klasy. Klasa, po której dziedziczy się, nazywana jest klasą bazową (lub klasą nadrzędną), a klasa dziedzicząca nazywana jest klasą pochodną (lub klasą podrzędną).

Aby utworzyć klasę pochodną, użyj dwukropka, po którym podaj specyfikator dostępu i nazwę klasy bazowej:

class Animal {
public:
    std::string name;
    
    void eat() {
        std::cout << name << " is eating" << std::endl;
    }
};

class Dog : public Animal {
public:
    void bark() {
        std::cout << name << " says woof!" << std::endl;
    }
};

Klasa Dog ma teraz dostęp zarówno do name, jak i do eat() z klasy Animal, a także do własnej metody bark(). Na tym polega dziedziczenie: ponownym wykorzystaniu istniejącego kodu przy jednoczesnym dodawaniu nowych funkcjonalności.

Dog myDog;
myDog.name = "Buddy";
myDog.eat();    // Odziedziczone z Animal
myDog.bark();   // Zdefiniowane w Dog

Słowo kluczowe public przed Animal określa typ dziedziczenia. Dziedziczenie publiczne oznacza, że publiczne składowe klasy bazowej pozostają publiczne w klasie pochodnej. Jest to najczęstsza forma dziedziczenia i modeluje relację „jest”: Dog jest Animal.

challenge icon

Wyzwanie

Łatwy

Stwórzmy prostą hierarchię pojazdów, która pokaże dziedziczenie w praktyce. Utworzysz bazową klasę Vehicle oraz pochodną klasę Motorcycle, która rozszerza ją o wyspecjalizowane zachowanie.

Rozmieścisz swój kod w trzech plikach:

  • Vehicle.h: Zdefiniuj bazową klasę Vehicle z:
    • publicznym polem std::string brand
    • publicznym polem int year
    • publiczną metodą displayInfo(), która wypisuje markę i rok pojazdu w formacie: Brand: <brand>, Year: <year>
  • Motorcycle.h: Zdefiniuj klasę Motorcycle, która publicznie dziedziczy po Vehicle. Ta klasa pochodna powinna dodawać:
    • publiczne pole int engineCC określające pojemność silnika
    • publiczną metodę revEngine(), która wypisuje: <brand> goes vroom vroom!

    Klasa Motorcycle automatycznie odziedziczy pola brand i year oraz metodę displayInfo() z klasy Vehicle.

  • main.cpp: Wczytaj trzy dane wejściowe (każdą w osobnym wierszu):
    1. Nazwa marki (ciąg znaków)
    2. Rok (liczba całkowita)
    3. Pojemność silnika w CC (liczba całkowita)

    Utwórz obiekt Motorcycle i ustaw jego odziedziczone pola (brand i year), a także jego własne pole engineCC. Następnie wypisz trzy wiersze wynikowe w podanej kolejności: najpierw wywołaj odziedziczoną metodę displayInfo(), potem samodzielnie wypisz pojemność silnika za pomocą std::cout << "Engine: " << moto.engineCC << "cc" << std::endl;, a na koniec wywołaj metodę revEngine() właściwą dla motocykla. To pokazuje dziedziczenie przez użycie zarówno odziedziczonej metody, jak i własnej metody klasy pochodnej.

    Format wyniku:

    Brand: <brand>, Year: <year>
    Engine: <engineCC>cc
    <brand> goes vroom vroom!

Na przykład dla danych wejściowych Harley, 2022 i 1200:

Brand: Harley, Year: 2022
Engine: 1200cc
Harley goes vroom vroom!

Nie zapomnij dodać strażników nagłówka do plików nagłówkowych i użyć #include "Vehicle.h" w nagłówku Motorcycle, aby uzyskać dostęp do klasy bazowej.

Spróbuj swoich sił

#include <iostream>
#include <string>
#include "Motorcycle.h"

using namespace std;

int main() {
    string brand;
    int year;
    int engineCC;

    cin >> brand;
    cin >> year;
    cin >> engineCC;

    // TODO: Utwórz obiekt Motorcycle
    // TODO: Ustaw jego pola brand, year i engineCC
    // TODO: Wywołaj displayInfo(), aby wyświetlić odziedziczone informacje
    // TODO: Wypisz informacje o silniku w formacie: Engine: <engineCC>cc
    // TODO: Wywołaj revEngine(), aby zademonstrować zachowanie charakterystyczne dla motocykla

    return 0;
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator C++ online