Warum reference mit *dereferenzieren?
-
Hallo zusammen,
ich beschäftige mich gerade mit der Operatorüberladung und dachte ich hätte Referenzen verstanden, aber der folgende Ausdruck ist mir über den Weg gelaufen und jetzt verstehe ich es nicht mehr. Ihr könnt da bestimmt helfen.
friend bool operator>(const Zahl& links, const Zahl& rechts) { return *links > *rechts; }
Ich dachte mir, dass wenn ich jetzt z.B.
bool c = 1 > 2;
aufrufe, dass die Werte 1 und 2 als Referenz (Zahl&) in die Funktion übernommen werden. Wenn ich jetzt den Vergleich zurückgeben möchte, sollte ich das doch mit links > rechts machen können, da bei Referenz auf den Inhalt ohne den * Operator zugegriffen wird. Habe auch noch keinen * bei Referenzen gesehen, immer nur bei Zeigern.
Warum steht da *rechts statt rechts?
Danke und Gruß
Jini
-
@Jini sagte in Warum reference mit *dereferenzieren?:
Warum steht da *rechts statt rechts?
Keine Ahnung. Was ist
Zahl
? Wo hast du das geklaut?
-
Ja, die Dereferenzierung dort ist falsch, es kompiliert ja auch nicht: Ideone-Code
Außer, der
*
-Operator wäre auch überladen, wie in geänderter Ideone-Code
-
Ah ja stimmt, der * Operator ist auch überladen! Danke Th69!
@manni66 sagte in Warum reference mit *dereferenzieren?:
Keine Ahnung. Was ist
Zahl
? Wo hast du das geklaut?Zahl ist meine Klasse.
-
@Jini sagte in Warum reference mit *dereferenzieren?:
Ah ja stimmt, der * Operator ist auch überladen! Danke Th69!
@manni66 sagte in Warum reference mit *dereferenzieren?:
Keine Ahnung. Was ist
Zahl
? Wo hast du das geklaut?Zahl ist meine Klasse.
Technisch korrekte Antwort, aber nicht das was wir mit der Frage beabsichtigten. Wir wollen wissen, was die Definition aus Sicht des Compilers ist. Sprich: Code!
-
@Jini sagte in Warum reference mit *dereferenzieren?:
Warum steht da *rechts statt rechts?
Zahl ist meine Klasse.
Ah ja stimmt, der * Operator ist auch überladen! Danke Th69!
-
@SeppJ sagte in Warum reference mit *dereferenzieren?:
@Jini sagte in Warum reference mit *dereferenzieren?:
Ah ja stimmt, der * Operator ist auch überladen! Danke Th69!
@manni66 sagte in Warum reference mit *dereferenzieren?:
Keine Ahnung. Was ist
Zahl
? Wo hast du das geklaut?Zahl ist meine Klasse.
Technisch korrekte Antwort, aber nicht das was wir mit der Frage beabsichtigten. Wir wollen wissen, was die Definition aus Sicht des Compilers ist. Sprich: Code!
int& operator*(); // Dereferenzieren: Zugriff auf den Wert direkt erhalten
@hustbaer sagte
Sorry, hatte ich vorher nicht kapiert, was das bedeuten sollte!
-
Nicht "nur" die Deklaration von deinem * operator, sondern der Code deiner Klasse "Zahl" ist interessant, wenn du Fragen zum Verhalten eben dieser hast.
-
Danke, die Frage war nur, warum ich * verwenden sollte bei der Referenz und die Antwort ist, weil der * Operator überladen wurde und das deshalb möglich macht. Frage ist aus meiner Sicht beantwortet! Danke
-
@Jini sagte in Warum reference mit *dereferenzieren?:
Zahl ist meine Klasse.
Du baust dir eine Klasse mit Operatorüberladungen und verstehst dann nicht, was du programmiert hast, wunderst dich aber, dass es funktioniert? Sieht eher nach Klassenklau aus...
-
Ich möchte auch noch eine andere Frage in den Raum werfen:
@Jini sagte in Warum reference mit *dereferenzieren?:int& operator*(); // Dereferenzieren: Zugriff auf den Wert direkt erhalten
Was soll "Zugriff auf den Wert direkt erhalten" bedeuten? Etwa, dass Klasseninterna über den operator* plötzlich öffentlich werden (und geändert werden können)? Das erscheint mir problematisch. Aber gut, dazu müsste man wissen, was die Klasse tut bzw. wofür die gut ist.
-
@DocShoe sagte in Warum reference mit *dereferenzieren?:
@Jini sagte in Warum reference mit *dereferenzieren?:
Zahl ist meine Klasse.
Du baust dir eine Klasse mit Operatorüberladungen und verstehst dann nicht, was du programmiert hast, wunderst dich aber, dass es funktioniert? Sieht eher nach Klassenklau aus...
Genau, habe mir ein Beispiel gesucht und versucht es nachzuvollziehen, dabei habt ihr mir alle geholfen! Danke nochmal
-
@Jini sagte in Warum reference mit *dereferenzieren?:
Genau, habe mir ein Beispiel gesucht und versucht es nachzuvollziehen
Wenn du das das nächste mal gleich dazuschreibst, dann kommen vermutlich weniger blöde Kommentare wie z.B. das von mir
Und: Wenn du eine kleine Klasse - wie (vermutlich)
Zahl
in diesem Fall - hast, dann hilft es auch den kompletten Code zu posten.