Grundlagenfrage Vererbung
-
Hi,
man verzeihe mir die sicher dumme Frage zur Vererbung unter C++, aber ich komme aus der Java-Welt und stelle nur gerade fest, dass etwas in C++ nicht zu gehen scheint, was in problemlos Java klappt:
Ich habe eine Basisklasse ABase und eine Klasse ANotBase, die von ABase erbt. Beide haben eine Methode doIt().
Des weiteren habe ich eine Variable my_aBase vom Typ *ABase, die ich aber mit my_aBase=new ANotBase() anlege (also die übergeordnete Klasse).
Wenn ich jetzt allerdings my_aBase->doIt() aufrufe, lande ich niemals in der entsprechenden Methode von ANotBase sondern immer in ABase obwohl my_ABase eigentlich ein Objekt vom Typ ANotBase ist. Erst mit einem expliziten Cast ((ANotBase*)my_aBase)->doIt() funktioniert es.
Das kann doch eigentlich nicht sein, dass C++ diese einfache Funktionalität nicht bietet, Methoden der übergeorndeten Klasse aufzurufen? Was mache ich hier also falsch?
-
In C++ musst du die Methode explizit als virtual deklarieren.
etwa so:class Base { public: virtual void doIt(); }; class Derived { public: virtual void doIt(); };
-
Ah...und wie bringe ich ihn innerhalb von doIt() dazu, dann auch noch die übergeordnete Methode auszuführen? super() gibts jascheinbar auch nicht...
-
Müsste so
Base::doIt ()gehen.