(Warum) Muss Basisklasse Pointer sein?



  • Hallo,

    ich bin etwas verwirrt. Wenn ich eine Basisklasse bereitstelle mit virtuellen methoden die dann in den abgeleiteten klassen implementiert werden. Muss die Basisklasse zwingen mit Base_Class* base = NULL initialisiert werden oder könnte ich auch ein stack-objekt erstellent mit Base_Class base; ?

    Wenn ja warum?

    Ich dachte es würde sowas gehen:

    BaseClass base;
    base = Derived();
    base.foo();
    

    geht das nicht?



  • Jein. Das geht schon, hat aber nicht das Verhalten, dass du willst. Da die Basisklasse kleiner oder gleich der abgeleiteten Klassen ist, kriegst du hier ev. sogenanntes Slicing. Sprich es gehen Daten verloren. Du hast dann tatsächlich nur noch das Basisklassenobjekt.

    Ein Zeiger hat das Problem nicht, da der nicht weiss wie gross das ist, auf das er zeigt.



  • Öha....ok, vielen dank!



  • Mati schrieb:

    ich bin etwas verwirrt. Wenn ich eine Basisklasse bereitstelle mit virtuellen methoden die dann in den abgeleiteten klassen implementiert werden.

    Das kommt drauf an, ob die Basisklasse abstrakt ist. Falls ja, kannst du von ihr keine eigenständigen Objekte erstellen.


Anmelden zum Antworten