C++ - Vererbung

C

chronixTT

Ich habe eine Frage zur Vererbung.

Ich habe eine Eltern-Klasse von der 2 Kinder abgeleitet werden.
Diese Kinder überschreiben jeweils eine Methode der Eltern-Klasse mit einer eigenen.

Im Hauptprogramm soll der Nutzer zur Laufzeit entscheiden welche der 2 Kind-Klassen benutzt werden soll.

Ich wollte es jetzt so machen, dass ich einen zeiger auf eine Instanz der Elternklasse anlege und darüber die methode aufrufe.
Dabei wird zur Laufzeit aber immer die Methode der Eltern-Klasse aufgerufen (da der Zeiger ja auch von diesem Typ ist!).
Wie müsste ich das richtig machen?

Codebeispiel:
class Eltern{ Public: doSomething(void){ cout << 'a'; }}
class Kind1 : Eltern{ Public: doSomething(void){ cout << 'b'; }}
class Kind2 : Eltern{ Public: doSomething(void){ cout << 'c'; }}

Main:
Eltern *x = new Kind1();
x->doSomething();
Ausgabe: "a";
 
Du musst die Funktion der Elternklasse als "virtual" deklarieren.
Ein Beispiel:
C++:
class Eltern
{
  public:
    virtual void doSomething()
    {
      cout << "a";
    }
};
 
Wenn du immer nur den Basis-Klassen-Pointer rumziehst, solltest du auch den Destructor der Basisklasse virtual machen, da sonst bei delete die Destruktoren der abgeleiteten Klassen nicht aufgerufen werden!
 
Im Prinzip kannst du einfach alle Funktionen als "virtual" kennzeichnen, wenn du davon ausgehen kannst, dass sie abgeleitet werden.
 

Neue Beiträge

Zurück