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.


Anmelden zum Antworten