C++ Vererbung: Ein Anfänger-Leitfaden

Hallo daar, zukünftige C++ Zauberer! Heute werden wir auf eine aufregende Reise in die Welt der C++ Vererbung aufbrechen. Keine Sorge, wenn du neu bei der Programmierung bist – ich werde dein freundlicher Guide sein, und wir werden dies Schritt für Schritt angehen. Am Ende dieses Tutorials wirst du erstaunt sein, wie viel du gelernt hast!

C++ Inheritance

Was ist Vererbung?

Bevor wir einsteigen, beginnen wir mit einer einfachen Analogie. Stell dir vor, du erstellst einen Familienstammbaum. Genau so, wie Kinder Eigenschaften von ihren Eltern erben, können in C++ Klassen Eigenschaften und Verhaltensweisen von anderen Klassen erben. Cool, nicht wahr?

Vererbung ist ein grundlegendes Konzept in der objektorientierten Programmierung, das es uns ermöglicht, neue Klassen basierend auf bestehenden zu erstellen. Dies fördert die Wiederverwendung von Code und hilft dabei, unseren Code in einer hierarchischen Struktur zu organisieren.

Basisklasse und abgeleitete Klassen

In der Welt der C++ Vererbung haben wir zwei Hauptakteure: Basisklassen und abgeleitete Klassen.

Basisklasse

Eine Basisklasse (auch bekannt als Elternklasse oder Superklasse) ist die Klasse, von der andere Klassen erben. Es ist wie der Vorfahr in unserer Familienstammbaum-Analogie.

Lassen Sie uns eine einfache Basisklasse erstellen:

class Tier {
public:
void essen() {
cout << "Dieses Tier isst." << endl;
}

void schlafen() {
cout << "Dieses Tier schläft." << endl;
}
};

In diesem Beispiel ist Tier unsere Basisklasse. Sie hat zwei Methoden: essen() und schlafen(). Das sind gemeinsame Verhaltensweisen, die die meisten Tiere teilen.

Abgeleitete Klasse

Eine abgeleitete Klasse (auch bekannt als Kindklasse oder Unterklasse) ist eine Klasse, die von einer Basisklasse erbt. Es ist wie die Nachkommen in unserem Familienstammbaum.

Lassen Sie uns eine abgeleitete Klasse erstellen:

class Hund : public Tier {
public:
void bellen() {
cout << "Wuff! Wuff!" << endl;
}
};

Hier ist Hund unsere abgeleitete Klasse. Sie erbt von Tier, daher hat sie automatisch die Methoden essen() und schlafen(). Wir haben auch eine neue Methode bellen() hinzugefügt, die spezifisch für Hunde ist.

Nun sehen wir, wie wir diese Klassen verwenden können:

int main() {
Hund meinHund;
meinHund.essen();   // Ausgabe: Dieses Tier isst.
meinHund.schlafen(); // Ausgabe: Dieses Tier schläft.
meinHund.bellen();  // Ausgabe: Wuff! Wuff!
return 0;
}

Ist das nicht erstaunlich? Unsere Hund Klasse kann Methoden von der Tier Klasse verwenden, ohne dass wir diese neu schreiben müssen!

Zugriffskontrolle und Vererbung

Nun reden wir darüber, wer was in unserer C++ Familie sehen kann. Genau wie in realen Familien gibt es einige Dinge, die öffentlich bekannt sind, einige nur für Familienmitglieder und einige, die persönliche Geheimnisse sind.

In C++ haben wir drei Zugriffsstufen:

  1. Public
  2. Protected
  3. Private

Sehen wir uns an, wie diese mit der Vererbung funktionieren:

class Tier {
public:
int alter;
protected:
string name;
private:
int geheimCode;
};

class Hund : public Tier {
public:
void setName(string n) {
name = n;  // OK, 'name' ist geschützt in Tier
}
void setGeheimCode(int code) {
// geheimCode = code;  // Fehler! 'geheimCode' ist privat in Tier
}
};

In diesem Beispiel:

  • alter ist öffentlich, daher kann darauf von überall zugegriffen werden.
  • name ist geschützt, daher kann darauf in Tier und jeder Klasse, die von Tier abgeleitet ist, zugegriffen werden.
  • geheimCode ist privat, daher kann darauf nur innerhalb der Tier Klasse zugegriffen werden.

Arten der Vererbung

C++ bietet verschiedene Arten der Vererbung, um verschiedenen Bedürfnissen gerecht zu werden. Lassen Sie uns diese erkunden!

Einfache Vererbung

Dies ist die einfachste Form, bei der eine Klasse von nur einer Basisklasse erbt. Das haben wir bereits bei unserem Hund Beispiel gesehen.

Mehrfachvererbung

Dies ist wie eine Familienlinie: Der Enkel erbt vom Vater, der wiederum vom Großvater erbt.

class Tier {
public:
void essen() { cout << "Essen..." << endl; }
};

class Säugetier : public Tier {
public:
void atmen() { cout << "Atmen..." << endl; }
};

class Hund : public Säugetier {
public:
void bellen() { cout << "Bellen..." << endl; }
};

int main() {
Hund meinHund;
meinHund.essen();     // Von Tier
meinHund.atmen();     // Von Säugetier
meinHund.bellen();    // Von Hund
return 0;
}

Hierarchische Vererbung

Dies ist, wenn mehrere Klassen von einer einzigen Basisklasse erben. Stell dir das vor wie Geschwister in einer Familie.

class Tier {
public:
void essen() { cout << "Essen..." << endl; }
};

class Hund : public Tier {
public:
void bellen() { cout << "Bellen..." << endl; }
};

class Katze : public Tier {
public:
void miauen() { cout << "Miauen..." << endl; }
};

Multiple Vererbung

Multiple Vererbung ist, wenn eine Klasse von mehr als einer Basisklasse erbt. Es ist wie having Traits von beiden Eltern!

class FliegendesWesen {
public:
void fliegen() { cout << "Fliegen..." << endl; }
};

class SchwimmendesWesen {
public:
void schwimmen() { cout << "Schwimmen..." << endl; }
};

class Ente : public FliegendesWesen, public SchwimmendesWesen {
public:
void quaken() { cout << "Quaken..." << endl; }
};

int main() {
Ente meineEnte;
meineEnte.fliegen();   // Von FliegendesWesen
meineEnte.schwimmen(); // Von SchwimmendesWesen
meineEnte.quaken();    // Von Ente
return 0;
}

Aber Vorsicht! Mehrfachvererbung kann, wenn nicht vorsichtig verwendet, zum berühmten "Diamant-Problem" führen.

Tabelle der Vererbungsmethoden

Hier ist eine praktische Tabelle, die die von uns besprochenen Vererbungsmethoden zusammenfasst:

Vererbungsart Beschreibung Beispiel
Einfach Eine Klasse erbt von einer Basisklasse Hund : public Tier
Mehrfachstufen Eine Klasse erbt von einer abgeleiteten Klasse Hund : public Säugetier, Säugetier : public Tier
Hierarchisch Mehrere Klassen erben von einer einzigen Basisklasse Hund : public Tier, Katze : public Tier
Multiple Eine Klasse erbt von mehreren Basisklassen Ente : public FliegendesWesen, public SchwimmendesWesen

Und da hast du es, Leute! Wir haben die Grundlagen der C++ Vererbung abgedeckt. Denke daran, Übung macht den Meister, also mach nicht Angst, mit diesen Konzepten zu experimentieren. Fröhliches Coden, und möge die Vererbung mit dir sein!

Credits: Image by storyset