Vererbung

Objekt Orientierte Programmierung soll die Welt widerspiegeln. Nehmen wir an, wir haben die Klasse Vogel. Nun haben wir einen Strauss und eine Amsel. Es sind beide Vögel, aber doch verhalten sie sich unterschiedlich. Jetzt könnte man zwar beide Klassen unabhängig voneinander schreiben, aber das wäre fad, denn wir müssten recht viel Code 2mal schreiben...

Deshalb wurde das Konzept der Vererbung eingeführt. Wir sagen dem Compiler einfach, dass er alles aus einer anderen Klasse in unserer Klasse verwenden soll.

Aber Vererbung soll nicht verwendet werden um sich Schreibarbeit zu ersparen. Vererbung drückt eine Beziehung zwischenzwei Klassen aus. Generell sagt man, wenn der folgende Satz Sinn ergibt, dann ist Vererbung OK: 'Derived ist ein Base'. Also zB 'Amsel ist ein Vogel'.

    #include<iostream>
    using namespace std;

    class Vogel
    {
    public:
      void fliege();
    };

    class Singvogel : public Vogel
    {
    public:
      void sing();
    };

    class SprechenderSingvogel : public Singvogel
    {
    public:
      void sprich();
    };

    int main()
    {
      Vogel vogel;
      vogel.fliege();

      Singvogel singvogel;
      singvogel.fliege();
      singvogel.sing();

      SprechenderSingvogel sprechenderSingvogel;
      sprechenderSingvogel.fliege();
      sprechenderSingvogel.sing();
      sprechenderSingvogel.sprich();
    }

    void Vogel::fliege()
    {
      cout<<"Ich fliege...\n";
    }

    void Singvogel::sing()
    {
      cout<<"What shall we do with the drunken sailor...\n";
    }

    void SprechenderSingvogel::sprich()
    {
      cout<<"bla, bla bla blaaaaaaaaaaaaaaaa\n";
    }
    

Neben public Vererbung gibt es auch noch private und protected Vererbung.

Arten der Vererbung
VererbungpublicprotectedprivateAusgesprochen
publicpublicprotectedprivateDerived ist ein Base
protectedprotectedprotectedprivateDerived ist implementiert mittels Base
privateprivateprivateprivateDerived ist implementiert mittels Base

private und protected Vererbung verwendet man nur ganz selten (Tatsächlich habe ich protected Vererbung noch nie gebraucht). Denn meistens kann man ein 'implementiert mit' besser darstellen, indem 'Derived' ein 'Base' als Membervariable besitzt.

Statt Derived erbt von Base, kann man auch Derived ist von Base abgeleitet sagen.

Deine Aufgabe ist es jetzt die Beziehungen zwischen folgenden Klassen zu modellieren. Du brauchst keinen Code zu schreiben, sondern dir nur die Beziehungen überlegen:Vogel, Pinguin, Amsel, Strauss

Hier ist die Lösung

top