Compiler - Internes



  • Hallo,

    folgende Situation:

    ich habe eine Oberklasse mit einer privaten Element-Var.(Pointer) und einer Methode, die protected ist. In dieser Methode wird die Element-Var. verwendet, unter Aufruf einer ihrer öffentlichen Operation.

    Nun habe ich eine weitere Klasse, die von dieser Oberklasse abgeleitet ist. In ihr habe ich die selbe private Element-Var. nochmals definiert. Nun rufe ich die oben beschriebene protected Methode auf.

    Als Ergebnis bekomme ich einen Absturz, an der Stelle an der die Funktion der Element-Var. aufgerufen wird, weil sie(Var.) NULL ist.

    Meine Vermutung ist, dass in der Methode die Var. der Oberklasse verwendet wird und nicht die der Unterklasse. Die jedoch wird natürlich nicht initialisiert.

    Frage:

    Müsste nicht der Compiler es über seine interne VP-Tabelle die Var. mappen, damit man keinen Absturz bekommt.

    Danke für die Antworten im vorraus.

    Gruß

    Eddy



  • EddyRoth schrieb:

    Meine Vermutung ist, dass in der Methode die Var. der Oberklasse verwendet wird und nicht die der Unterklasse.

    Das vermute ich auch, und das wäre auch das richtige Verhalten.

    Müsste nicht der Compiler es über seine interne VP-Tabelle die Var. mappen, damit man keinen Absturz bekommt.

    Nö. Nur Methoden können virtuell sein. Du willst anscheinend virtuelle Membervariablen.

    Warum definierst du die Membervariable überhaupt neu?



  • Das Verhalten ist zu 100% richtig, die nicht-virtuelle methode die du aufrufst, arbeitet mit den Komponenten die in der Basisklasse zur Verfügung stehen (die anderen kann sie ja auch gar nicht kennen).


Anmelden zum Antworten