operator= überladen, sodass man chars mit = gegenseitig zuweisen kann



  • Warum geht das hier nicht:

    char* operator= (char *lhs,char *rhs);
    

    error: `char* operator=(char*, char*)' must be a nonstatic member function

    MfG
    Stromberg



  • Wie willst du den denn dann verwenden???


  • Mod

    operator= kann nur für Klassenobjekte als linker Operand und nur als nichtstatische Memberfunktion überladen werden.



  • Hallo

    D schrieb:

    Wie willst du den denn dann verwenden???

    Wie er beschrieben hat : er will das leidige strcpy umgehen...
    camper hat schon gesagt das es nicht geht (er hat dir im Grunde nur die Fehlermeldung übersetzt...). Verwende std::string dann kannst du auch einfach zuweisen.

    bis bald
    akari



  • Und warum kann man eigentlich den operator = nur in Klassen - also als einseitigen Operator - verwenden?
    MfG
    Stromberg



  • Stromberg schrieb:

    Und warum kann man eigentlich den operator = nur in Klassen - also als einseitigen Operator - verwenden?

    Weil C++ garantiert, dass die Semantik der Basistypen nur erweiterbar, nicht aber veränderbar ist. D.h. wenn irgendwo steht 'a = b' und a und b sind beide vom Typ 'char*', dann ist ein gewisses Verhalten definiert, das sich nicht verändern lässt.

    Daher ist Dein Code nicht zulässig.



  • halli hallo,

    du könntest es anstatt des = operators einfach mal mit dem << operator versuchen. das sollte funktionieren. dem entgegen steht dann natürlich die gute lesbarkeit des codes. allerdings finde ich es für char-ketten gar nicht so abwegig, sie wie streams operieren zu lassen...

    mfg
    marco



  • nonstatic member schrieb:

    du könntest es anstatt des = operators einfach mal mit dem << operator versuchen. das sollte funktionieren. dem entgegen steht dann natürlich die gute lesbarkeit des codes. allerdings finde ich es für char-ketten gar nicht so abwegig, sie wie streams operieren zu lassen...

    Ich halte Operatoren in dieser Hinsicht für vollkommen falsch, egal ob über + oder <<.

    Sag mir mal was - wenn wir irgendeinen Operator für char* definieren - mit der Speicherzuweisung, und bereits definierten Verhalten passieren soll...

    Nehmen wir doch einfach mal an, irgendwer verwendet dann den Code wie folgt:

    char* test = "a" + "b";
    

    Ist nun der Operator für die Speicherallozierung verantwortlich, das Ziel kann es ja nicht sein, da es ein Returnvalue zugewiesen bekommt.

    Und was passiert dann hier:

    std::cout << "a" << "b";
    

    Könnte es sein das sich dann das Verhalten verändert?

    cu André


Anmelden zum Antworten