== impliziert !=
-
Hi,
wenn ich für zwei Pointer operator== implementiere um auf Gleichheit der Objekte dahinter zu prüfen, ist dann automatisch auch != so definiert oder ist
(A ==
dann nicht äquivalent zu !(A != 
danke
-
_et schrieb:
wenn ich für zwei Pointer operator== implementiere
Das ist dann kein C++. Operatoren können nur überladen werden, wenn wenigstens ein Operand ein UDT ist.
-
Genau. Weiters kannst und musst du operator == und != einzeln/extra/getrennt überladen/definieren wenn du beide verwenden willst. D.h. wenn du nur == definierst dann gibt es auch nur ==.
Operator != wird dann meist einfach so implementiert:bool operator == (UDT const& a, UDT const& b) { // ... // ... // ... } bool operator != (UDT const& a, UDT const& b) { return !(a == b); }Und wenn du Operatoren für 2 unterschiedliche Typen definierst musst du auch beide Richtungen definieren:
bool operator == (UDT_A const& a, UDT_B const& b) { // ... } bool x1 = UDT_A() == UDT_B(); // geht bool x2 = UDT_B() == UDT_A(); // geht NICHT bool operator == (UDT_B const& b, UDT_A const& a) { return a == b; } bool x3 = UDT_B() == UDT_A(); // jetzt schon :)
-
Es reicht aber tatsächlich == und < zu implementieren und dann die Header-Datei <utility> einzubinden.
MfG SideWinder
-
... und den Namensraum std::rel_ops (oder so ähnlich) einzubinden

-
... wenn die beiden Argumente vom gleichen Typ sind und die überladenen Operatoren < und == per ADL hefunden werden können, das für die anderen Operatoren aber nicht notwendig ist. Gerade Letzteres macht diesen Teil der Standardbibliothek in meinen Augen weniger nützlich.