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.


Anmelden zum Antworten