Operatorüberladung - Basisdatentypen
-
Moin,
Wieso soll es denn nicht möglich sein, Operatoren einer Klasse mit Basisdatentypen als Parameter zu überladen? Ich hab die Klasse "String" und folgende Operatorüberladung in dieser Klasse:
bool operator==(const char *str2);Wieso soll das denn nicht gehn? Der Compiler sagt nichts.
-
Das geht, obwohl man alles, was kein Zuweisungsoperator ist, besser als freie Funktion umsetzt. Was nicht geht, ist, Operatoren allein für Basistypen zu überladen, also etwa
bool operator==(double, int); // Keine Chance.
-
GeorgeX schrieb:
Wieso soll das denn nicht gehn? Der Compiler sagt nichts.
Es sagt auch niemand anderer was dagegen. Wer hat das denn behauptet?
-
GeorgeX schrieb:
Moin,
Wieso soll es denn nicht möglich sein, Operatoren einer Klasse mit Basisdatentypen als Parameter zu überladen? Ich hab die Klasse "String" und folgende Operatorüberladung in dieser Klasse:
bool operator==(const char *str2);Wieso soll das denn nicht gehn? Der Compiler sagt nichts.
Nein. Es geht nur nicht, wenn du den Operator global deklarierst und zwei Parameter hast, von denen keiner ein user-defined Typ ist.
Wie seldon schon sagte. Wenn du allerdings in der Klasse einen Operator definierst, dann ist der zweite Parameter dein C-String, aber der erste eine Referenz auf eine hier nicht-konstante Instanz.
Also ein user-defined type.
Ich tippe mal auf schlechtes Buch.
-
Sone_logoff schrieb:
Nein. Es geht nur nicht, wenn du den Operator global deklarierst und zwei Parameter hast, von denen keiner ein user-defined Typ ist.
s/global/in namespace scope/ oder s/global/als freie Funktion/
-
pumuckl schrieb:
Sone_logoff schrieb:
Nein. Es geht nur nicht, wenn du den Operator global deklarierst und zwei Parameter hast, von denen keiner ein user-defined Typ ist.
s/global/in namespace scope/ oder s/global/als freie Funktion/
...

Also mit global meine ich nicht in einer Klasse, falls das deine Frage ist.P.S.: Oben meine ich mit Referenz eine allgemeine Referenz, also Zeiger/Referenzen (hier ersteres).
-
Sone schrieb:
Also mit global meine ich
Was du damit meinst kann keiner wissen. Wie es allgemein definiert ist schon eher: global scope bedeutet nicht nur außerhalb von Klassen, sondern auch außerhalb von namespaces (§3.3.6,3). -> Schreib also, was du schreiben willst, nicht ein Wort, von dem du nur glaubst, dass es das richtige sein könnte

-
pumuckl schrieb:
Sone schrieb:
Also mit global meine ich
Was du damit meinst kann keiner wissen. Wie es allgemein definiert ist schon eher: global scope bedeutet nicht nur außerhalb von Klassen, sondern auch außerhalb von namespaces (§3.3.6,3). -> Schreib also, was du schreiben willst, nicht ein Wort, von dem du nur glaubst, dass es das richtige sein könnte

Okay, tut mir Leid.