Warum ist this ein Zeiger und keine Referenz?
-
Na, warum denn?
-
Wegen der Speicherbelastung?
-
Evolver schrieb:
Wegen der Speicherbelastung?
Hä?
-
class this; schrieb:
Na, warum denn?
das stört mich auch. es ist lästig.
bin schon dabei, am anfang jeder methodetypeof(*this)& self=*this;
zu schreiben.
-
volkard schrieb:
class this; schrieb:
Na, warum denn?
das stört mich auch. es ist lästig.
bin schon dabei, am anfang jeder methodetypeof(*this)& self=*this;
zu schreiben.
Ehrlich? Dann würde ich aber doch eher in den sauren Apfel beißen und ein Makro definieren.
#define self (*this)
Hat halt auch so seine Nachteile
.
-
Walli schrieb:
Ehrlich?
nein. war gelogen.
mfg
Don Volkard
-
Weil eigene Klassen (und damit this) vor Operatorenüberladung (und damit Referenzen) ihren Weg in C++ gefunden haben.
-
operator void schrieb:
Weil eigene Klassen (und damit this) vor Operatorenüberladung (und damit Referenzen) ihren Weg in C++ gefunden haben.
Was hat Operatorüberladung mit Referenzen zu tun?
-
IIRC wurden die nur deswegen eingebaut. OÜL wäre in der Form ohne Referenzen ja gar nicht möglich.
-
ness schrieb:
operator void schrieb:
Weil eigene Klassen (und damit this) vor Operatorenüberladung (und damit Referenzen) ihren Weg in C++ gefunden haben.
Was hat Operatorüberladung mit Referenzen zu tun?
Performance meets hübsche Syntax.
OÜL wäre in der Form ohne Referenzen ja gar nicht möglich
Möglich wäre es schon. Du könntest entweder alles by value übergeben oder aber Überladung auf Basis von Zeiger-auf-udt erlauben. Schön ist natürlich beides nicht.
-
HumeSikkins schrieb:
Möglich wäre es schon. Du könntest entweder alles by value übergeben oder aber Überladung auf Basis von Zeiger-auf-udt erlauben. Schön ist natürlich beides nicht.
by-value verbietet sich z.B. bei ++, und Überladung per Zeiger hat den Nachteil, dass die meisten Operatoren für Zeiger schon definiert sind.
-
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