Warum ist this ein Zeiger und keine Referenz?
-
Jedes Objekt einer bestimmten Klasse verwaltet seine eigene Kopie der Datenelemente einer Klasse. Die verschiedenen Objekte einer Klasse müssen sich die vorhandenen Elementfunktionen jedoch teilen, sie rufen jeweils dieselbe Kopie einer bestimmten Elementfunktion auf. Jede Elementfunktion einer Klasse ist nämlich nur einmal vorhanden, d.h. sie ist nicht innerhalb des Klassenobjektes gespeichert. Wäre letzteres der Fall, würde die Anzahl der Funktionskopien mit jedem definierten Objekt enorm anwachsen.
Damit steht man vor einem Problem:
Wie ist die Elementfunktion, von der nur eine Instanz existiert, mit den einzelnen Datenobjekten der verschiedenen Objekte, die diese Funktion aufrufen, verbunden?
Die Elementfunktion setze(int i, int j, double d) der matrix-Klasse muß ja auf die Elemente der verschiedenen matrix-Objekte, die diese Methode aufrufen, Zugriff haben, da sie diese u.U. verändern soll.Die Lösung des Problems:
Die Lösung dieses Problems liegt in dem Zeiger this. Jede Elementfunktion einer Klasse enthält automatisch einen Zeiger auf ihren Klassentyp mit dem Namen this.Der this-Zeiger enthält dabei die Adresse desjenigen Klassenobjektes, über welches die Elementfunktion aufgerufen wurde. Und damit hat jede Elementfunktion auch Zugang zu den speziellen Datenelementen des aufrufenden Objektes.
Quellennachweis:
Dies ist Version 0.990 des Kurses
C++ Tutorial
-
Es war aber gefragt, warum die Banane gelb ist
-
Also spricht eigentlich nichts dafür, dass this ein Zeiger ist, außer die Rückwärtskompatibilität?
-
class this; schrieb:
Also spricht eigentlich nichts dafür, dass this ein Zeiger ist, außer die Rückwärtskompatibilität?
genau. eine der unzählichen leichen im keller.
edit: cool, wenn die maus prellt, kann man mit einem klick zwei posts absetzen.
-
class this; schrieb:
Also spricht eigentlich nichts dafür, dass this ein Zeiger ist, außer die Rückwärtskompatibilität?
genau. eine der unzählichen leichen im keller.
-
dit: cool, wenn die maus prellt, kann man mit einem klick zwei posts absetzen.
Und wenn man Mod ist kann man solche Beiträge auch wieder löschen
*SCNR*
-
Wäre es denn "besser" oder "einfacher" wenn this eine Referenz wäre?
-
Ja. this kann weder Null sein noch umgebogen werden. Also ist eine Referenz semantisch logischer. Und weniger Tipparbeit als this->x ist this.x auch, spätestens bei (*this)[bla] wirds eklig.
-
Hallo,
es wurde zwar im Prinzip schon gesagt, aber vielleicht ist ja noch interessant, was Stroustrup selbst dazu sagt: http://www.research.att.com/~bs/bs_faq2.html#this
Sven
-
operator void schrieb:
spätestens bei (*this)[bla] wirds eklig.
ACK, deswegen nervt es mich am meisten, dass this keine Referenz ist.