Zeiger und Referenzen
-
Klasse & Klasse::Funktion() {
return *this;
}es wird eine referenz zurückgegeben
und eine referenz spricht du mit punkt anKlasse cKlasse; KLasse& rKlasse = cKlasse.Funktion();du kannst jetzt cKlasse und rKlasse gleichsam mit dem punkt benutzen
cKlasse.Variable = 10; rKlasse.Variable = 5; // is das selbe objekt wie cKlasse, d.h. die 10 wird mit 5 überschriebennächste frage?

-
sirvenue schrieb:
Klasse & Klasse::Funktion() {
return *this;
}Das & würde für mich andeuten, dass eine Referenz zurückgegeben wird.. aber es wird ja ein Wert zurückgegeben ...
Du kannst eine Referenz syntaktisch nicht von einem Wert unterscheiden. Dass hier die Referenz auf *this und nicht der Wert *this zurückgegeben wird, erkennt man nur am Rückgabetyp. Ist auch genauso bei Funktionsargumenten:
void wertfunktion(int a); void reffunktion(int& a); ... int x = 5; wertfunktion(x); reffunktion(x);Im ersten Fall wird x als Wert übergeben, also kopiert; im zweiten Fall wird eine Referenz auf x übergeben.
Eigentlich ist genau das auch der Witz an Referenzen, das (fast) gleiche gibts ja auch nochmal bei den Zeigern, diesmal aber mit diversen Zeichen davon.
-
Im Prinzip faehrt man nicht schlecht, wenn man sich vorstellt, dass eine Referenz eigentlich ein konstanter Zeiger (nicht das worauf er zeigt ist konstant, sondern er selbst kann nie auf was anderes Zeigen) ist, dem man nicht mehr dereferenzieren braucht ...
Das hat folgende konsequenzen:
- Ne referenz muss immer gleich bei der erzeugung initialisiert werden.
- Da man nich aufn Zeiger direkt kommt, geht eine initialisierung mit Null nur ueber ganz boese tricks, und macht ausserdem auch keinen Sinn, da die referenz selbst dereferenziert, und NULL derefernzieren nen Fehler bringt, und die geschichte auch noch konst ist, kriegt mand as verhalten auch nie wieder los
Zeiger oder Referenzen?
C kann keine Referenzen, also wenn du C-Schnittstellen bedienen musst (bei DLLs), was gar nicht mal so selten ist, musst eh zeiger nehmen ...
Wenn du nen explizieten Ungueltigkeitswert brauchst, und diesen nich durch das Object selber ausdruecken kannst ... Zeiger!
Wenn du Variablitaet brauchst, also mal auf das Object, oder dann mal wieder das object zeigen willst (Referenz ist ja konst) dann Zeiger.
Dynamische erzeugung von objekten, bekommst eh schon zeiger ... die verwaltung macht man dann eh mit Zeiger (Braucht man eh NULL wert erkennung), aber wenn man aufn dynamisch erzeugtes Object referenzieren will, kann man auch gut referenzen nehmen.
Polymorphie geht auch mit referenzen.Wenn nix gegen referenz spricht, nimm ne referenz. schreibt sich besser, drueckt impliziet aus, das das teil immer gueltig ist ... und ist mehr C++ like.
In C++ sollte man die '*' dinger eh so viel meiden wie geht :pCiao ...
-
hi,
ich würde am besten Antworten: Referenz und Zeiger sind für den C++ - Programmierer eigentlich das gleiche, ledeglich mit einem syntaktischen Unterschied.
Der Vorteil einer Refernez: Diese kann dan auf die gleiche Weise wie eine Variable genutzt werden.
Der Nachteil: Bis auf die definition (zB: int &x;) sieht man dann, wenn man den code liest, dass es sich hierbei um eine Referenz handelt.Ich persönlich nutze lieber Zeiger, wo es nur geht, und verzichte auf Referenzen.
mfg
-
linu(x)bie_logout schrieb:
hi,
ich würde am besten Antworten: Referenz und Zeiger sind für den C++ - Programmierer eigentlich das gleiche, ledeglich mit einem syntaktischen Unterschied.
Hier muß man einfach mal eingreifen: FALSCH!!! Nie im Leben ist das für einen C++ Programmierer gleich!

Referenz = ein anderer Name für ein Objekt/Variable.
Pointer = eine Variable die auf ein Objekt/Variable _zeigt_.
Wenn DAS kein Unterschied ist, dann sind für dich Birnen und Äpfel bestimmt auch das gleiche. Geh mal auf den Wochenmarkt, zeig auf Äpfel und sag dem Verkäufer "Ich will diese Birnen haben!" Er wird dir sagen: "Das sind Äpfel, keine Birnen!" Und das zu Recht!
-
<absolut OT>
Also wie jetz ? Und wenn der verkäufer in seinem kopf ne referenz auf äpfel hat die birnen heisst ? Dann gehts ja obwohl du ja dann also Artchi ein zeiger auf birnen bist aber nich die referenz im kopf hast ? Du zeigst also auf birnen und meinst Äpfel, stimmt dann izzes was anderes. Und macht das irgend einen sinn was ich hier schreibe ?
</absolut OT>
-
#define <absolut OT> <absolut nonsens>
-
Hi!
Wie Artchi sagte:
Eine Referenz ist ein Synonym!
Ein Zeiger ist eine Variable!
Compilertechnisch ist natürlich eine Referenz ein Zeiger, aber das ist nur für Leute die einen eigenen Compiler programmieren wollen interessant.
Referenzen sind eine verborgene Verbindung zum Objekt.
-
<absolut OT></absolut OT> ist aber kein valides XML

-
Passt doch, war auch kein valider inhalt.
