Menu
Coddy logo textTech

Grundlagen der Vererbung

Teil des Abschnitts Objektorientierte Programmierung der C++-Journey von Coddy. Lektion 48 von 104.

Vererbung ermöglicht es einer Klasse, die Eigenschaften und Verhaltensweisen einer anderen Klasse zu übernehmen. Die Klasse, von der geerbt wird, wird als Basisklasse (oder Elternklasse) bezeichnet, und die Klasse, die erbt, wird als abgeleitete Klasse (oder Kindklasse) bezeichnet.

Um eine abgeleitete Klasse zu erstellen, verwenden Sie einen Doppelpunkt, gefolgt vom Zugriffsspezifizierer und dem Namen der Basisklasse:

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

Die Klasse Dog hat nun Zugriff sowohl auf name als auch auf eat() von Animal, sowie auf ihre eigene Methode bark(). Dies ist das Wesen der Vererbung: die Wiederverwendung von vorhandenem Code bei gleichzeitiger Hinzufügung neuer Funktionalität.

Dog myDog;
myDog.name = "Buddy";
myDog.eat();    // Geerbt von Animal
myDog.bark();   // In Dog definiert

Das Schlüsselwort public vor Animal gibt den Vererbungstyp an. Öffentliche Vererbung bedeutet, dass öffentliche Member der Basisklasse in der abgeleiteten Klasse öffentlich bleiben. Dies ist die häufigste Form und bildet eine „ist-ein“-Beziehung ab: Ein Hund ist ein Tier.

challenge icon

Aufgabe

Einfach

Erstellen wir eine einfache Fahrzeughierarchie, die Vererbung in der Praxis demonstriert. Du erstellst eine Basisklasse Vehicle und eine abgeleitete Klasse Motorcycle, die sie um spezielles Verhalten erweitert.

Du organisierst deinen Code auf drei Dateien verteilt:

  • Vehicle.h: Definiere eine Basisklasse Vehicle mit:
    • einem öffentlichen std::string brand-Member
    • einem öffentlichen int year-Member
    • einer öffentlichen Methode displayInfo(), die die Marke und das Baujahr des Fahrzeugs in folgendem Format ausgibt: Brand: <brand>, Year: <year>
  • Motorcycle.h: Definiere eine Klasse Motorcycle, die öffentlich von Vehicle erbt. Diese abgeleitete Klasse soll Folgendes hinzufügen:
    • ein öffentliches int engineCC-Member für den Hubraum des Motors
    • eine öffentliche Methode revEngine(), die Folgendes ausgibt: <brand> goes vroom vroom!

    Die Klasse Motorcycle erbt automatisch brand, year und displayInfo() von Vehicle.

  • main.cpp: Lies drei Eingaben ein (jeweils in einer eigenen Zeile):
    1. Markenname (String)
    2. Baujahr (Ganzzahl)
    3. Motorhubraum in CC (Ganzzahl)

    Erstelle ein Motorcycle-Objekt und setze seine geerbten Member (brand und year) sowie sein eigenes engineCC-Member. Erzeuge anschließend die drei Ausgabezeilen in dieser Reihenfolge: Rufe zuerst die geerbte Methode displayInfo() auf, gib danach den Hubraum selbst mit std::cout << "Engine: " << moto.engineCC << "cc" << std::endl; aus und rufe schließlich die motorradspezifische Methode revEngine() auf. Dies demonstriert Vererbung, indem sowohl die geerbte Methode als auch die eigene Methode der abgeleiteten Klasse verwendet werden.

    Ausgabeformat:

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

Wenn die Eingaben beispielsweise Harley, 2022 und 1200 lauten:

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

Vergiss nicht, Header-Guards in deine Header-Dateien aufzunehmen und #include "Vehicle.h" in deinem Motorcycle-Header zu verwenden, um auf die Basisklasse zuzugreifen.

Probier es selbst

#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: Erstelle ein Motorcycle-Objekt
    // TODO: Setze die Attribute brand, year und engineCC
    // TODO: Rufe displayInfo() auf, um die geerbten Informationen anzuzeigen
    // TODO: Gib die Motorinformationen im Format aus: Engine: <engineCC>cc
    // TODO: Rufe revEngine() auf, um das motorradspezifische Verhalten zu demonstrieren

    return 0;
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-C++-Compiler