Programmieren - alles kontrollieren 4.939 Themen, 20.671 Beiträge

Frage zu Vererbung und Zeiger auf Objekte

Yves3 / 2 Antworten / Flachansicht Nickles

Hallo

Folgender Code brachte mich dazu mal etwas genauer über Verebgung und Zeiger auf Basis- und abgeleitete Objekte nachzudenken:

spElemTemp = (MSXML2::IXMLDOMElementPtr) spNodeTemp;


Meine Interpretation, Gedanken und ein paar Fragen dazu, bitte korrigiert mich, wo ich falsch liege:
Hier wir scheinbar ein Zeiger einer Basisklasse einem Zeiger auf eine abgeleitete Klasse zugewiesen. Per Definition sollte das nicht gehen, deshalb braucht es hier auch einen Cast.
Umgekehrt ist das ja auch ohne Cast zulässig, wieso?
Nach purer "Bauernlogik" passt doch etwas kleines in etwas grosses, nicht aber etwas grosses in etwas kleines... dieser Gedanke scheint aber falsch zu sein.
Was ist ein Zeiger überhaupt genau?
Ein Zeiger zeigt auf einen Speicherbereich, hat aber auch einen Typ, demzufolge zeigt er von Punkt a bis Punkt b im Speicher (je nach Typgrösse). Richtig?
Wenn man das so sieht, würde aber die "Bauernlogik" zutreffen und beim Beispiel oben wäre kein Cast nötig... naütrlich mit dem unschönen Nebeneffekt, dass spElemTemp kein Vollwertiges Elementobjekt ist.
Ist es das hier überhaupt?

Viele Fragen :D. Wäre dankbar, wenn jemand etwas Licht ins Dunkle bringen könnte.
bei Antwort benachrichtigen
Andreas42 Yves3 „Frage zu Vererbung und Zeiger auf Objekte“
Optionen

Hi!

Die Bauernlogik ist eigentlich richtig, nur geht's hier nicht darum Töpfe zu stapeln, sondern Stecker zu verbinden. ;-)

Ich hab' das immer so gesehen: ein Zeiger hat Pins, die nur in seine Klasse passen (die hat die richtige Buchsenanzahl zum einstecken der Pins). Wird die Klasse abgeleitet, dann übernimmt sie das Buchsenlayout von der Elternklasse und man fügt ein paar neue Buchsen hinzu. Dazu gibt's dann Zeiger mit mehr Pins. Trotzdem passt aber auch ein Zeiger mit seinen Pins in die abgeleitete Klasse, weil die ja auch für ihn alle nötigen Buchsen mitbringt.

Man kann also, dass "Grosse" (die abgeleitete Klasse) auf den kleineren Zeiger stecken, dass passt schon. ;-)

Der Trick bei den Klassenableitungen ist ja gerade, dass man etwas anbaut bzw. hinzufügt und damit der (alte) Kern erhalten bleibt. Daher finden sich alle in der Elternklasse definierten Attribute und Methoden auch in der abgeleiteten Kindklasse wieder. Ein Zeiger der Elternklasse findet also alles vor, was auch in der Elternklasse vorhanden ist, daher passt er auch zu einer Instanz einer abgeleiteten Klasse. Die angebauten oder hinzugefügten Elemente kann er dann natürlich nicht wahrnehmen.

Bis dann
Andreas



Hier steht was ueber mein altes Hard- und Softwaregedoens.
bei Antwort benachrichtigen