operator == mit 2 Übergabeparametern geht nicht
-
Ich habe eine Klasse, die eigenen operator == braucht.
Das hier funktioniert:bool X::operator ==(const X& rX) const;
Wenn ich aber einen:
bool X::operator ==(const X& rX1, const X& rX2) const;
verwenden will, mekert der Compiler, dass der binäre operator == zu viele Parameter hat.
Es gibt ja auch Klassen, wo ein operator == zwei Paramter hat, da funktioniert's, warum bei mir dann nicht?
-
Du musst eine globale Funktion dafür machen mit Keyword friend und keine Methode.
-
Strogij schrieb:
...mit Keyword friend...
also das wüsste ich aber
keyword friend ist nicht verpflichtend
-
Ähm, merke ich auch gerade, sorry.
-
Strogij schrieb:
Du musst eine globale Funktion dafür machen mit Keyword friend und keine Methode.
Ich will ja eben nicht, dass das global sein wird. der operator == soll nur für X Objekte gültig sein und möglichst in der Klasse X sein.
Meinst Du so was wie:
// Datei: global.h #include "X.h" bool operator ==(const X& rX1, const X& rX2) const { // mach was.. return true; }
Wo soll man nun aber friend verwenden, wenn mein operator keine Klasse gehört?
In der Klasse X?#include "global.h" class X { friend bool operator ==(const X& rX1, const X& rX2) const; // ... }
-
Wenn er zu keiner Klasse gehört ist der auch mit keiner Klasse befreundet.
-
Die Funktion wird auch nur für X-Objekte(bei dir Referenzen) genutzt, das sieht so aus:
bool X::operator==(const X& rX1, const X& rX2); // global oder im Namespace, wie auch immer dein Design aussieht
Übrigens: konstante Referenzen?
Edit: friend wäre dazu da, wenn du in dieser globalen Funktion auf private Elemente zugreifen musst, um einen Vergleich zu machen.
-
Alles klar. Jetzt habe ich's verstanden
Danke!
-
Strogij schrieb:
Übrigens: konstante Referenzen?
Natürlich. Es ist unüblich, die Argumente von Vergleichsfunktionen zu ändern.
-
bool X::operator ==(const X& rX) const;
ist bereits ein binärer operator. du kannst dann entweder schreiben:
X x1, x2; x1 == x2 oder x1.operator ==( x2 )
-
groovemaster schrieb:
Strogij schrieb:
Übrigens: konstante Referenzen?
Natürlich. Es ist unüblich, die Argumente von Vergleichsfunktionen zu ändern.
Ich schätze mal das Strogij darauf hinaus wollte, dass es sowas wie konstante Referenzen in C++ nicht gibt. Es gibt nur Referenzen-auf-const. Da sich das aber so blöd schreiben lässt, verschlampen aber eigentlich alle diesen feinen Unterschied.
-
Da vorher niemand explizit von "konstanten Referenzen" gesprochen hatte, war meine Vermutung, dass er const in Verbindung mit Referenzen nicht kannte. Wie auch immer. Beides wäre ja damit geklärt.
HumeSikkins schrieb:
Es gibt nur Referenzen-auf-const. Da sich das aber so blöd schreiben lässt, verschlampen aber eigentlich alle diesen feinen Unterschied.
Mach ich eigentlich auch. *schäm* Kann aber auch daher kommen, dass man hin und wieder Typen wie const_reference sieht, anstatt reference_to_const.