Eine Frage zu Propertys: operator= überladen



  • Hallo Forum,

    nehmen wir an ich habe eine Klasse CPerson.

    //Wie kann ich aus diesem Source:
    CPerson oPerson;
    oPerson.Vorname("Albert");
    oPerson.Nachname("Bommel");
    
    // Dieses machen?
    CPerson oPerson;
    oPerson.Vorname = "Albert";
    oPerson.Nachname = "Bommel";
    
    //Wie kriege ich hier heraus welche Property zugewiesen werden muß?
    CPerson operator=(std::string s) {
    }
    

    Martin





  • Vielen Dank, ich schaue es mir an 🙂



  • martinsalo schrieb:

    Hallo Forum,

    nehmen wir an ich habe eine Klasse CPerson.

    //Wie kann ich aus diesem Source:
    CPerson oPerson;
    oPerson.Vorname("Albert");
    oPerson.Nachname("Bommel");
    
    // Dieses machen?
    CPerson oPerson;
    oPerson.Vorname = "Albert";
    oPerson.Nachname = "Bommel";
    
    }
    

    Vorausgesetzt, Vorname und Nachname sind public member von CPerson und von einem Typ, der const char*- kompatibel ist (z.B. std::string), dann brauchst du garnichts weiter machen. Dann weist du naemlich einer string-membervariablen einfach einen String zu und gut ists.

    martinsalo schrieb:

    //Wie kriege ich hier heraus welche Property zugewiesen werden muß?
    CPerson operator=(std::string s)
    

    Das hier ist ueberhauptnicht moeglich, da es einen unaeren operator= nicht gibt. Was du vermutlich meinst ist etwas wie

    //golbale Ueberladung
    CPerson& operator=(CPerson& lhs, const std::string& rhs);
    //oder als klassenmember:
    CPerson& CPerson::operator=(const std::string& rhs);
    

    Das wuerde dann dazu dienen, einer Person einen String zuzuweisen. Was du mit dem String dann machst sei dahingestellt. Bsp:

    CPerson& CPerson::operator=(const std::string& rhs)
    {
      std::istringstream fullname(rhs);
      fullname >> this->Vorname >> this->Nachname;
      return *this;
    }
    

    (jetzt mal ohne Fehlerbehandlung)
    Damit ginge sowas wie

    CPerson oPerson;
    oPerson = "Rainer Zufall";
    


  • pumuckl schrieb:

    Das hier ist ueberhauptnicht moeglich, da es einen unaeren operator= nicht gibt.

    Im Gegeinteil, es gibt keinen binären operator= (und damit auch keinen Nichtmember-operator=).



  • LordJaxom schrieb:

    Im Gegeinteil, es gibt keinen binären operator= (und damit auch keinen Nichtmember-operator=).

    Es gibt keinen unären operator=!

    Deshalb muss die Methode operator= auch genau einen Parameter haben.

    Außerdem hat das eine mit dem anderen nichts zu tun. Ich kann den binären operator+
    sowohl sowohl als Methode (mit einem Argument) als auch als globale Funktion (mit zwei Argumenten) implementieren.



  • Paul Panther schrieb:

    Es gibt keinen unären operator=!

    Sagte ich, ja.

    Außerdem hat das eine mit dem anderen nichts zu tun. Ich kann den binären operator+
    sowohl sowohl als Methode (mit einem Argument) als auch als globale Funktion (mit zwei Argumenten) implementieren.

    Aber nicht den operator=.



  • LordJaxom schrieb:

    Sagte ich, ja.

    Hmmm, ich lese aber immer noch bei deinem post, dass es keinen binären operator= gäbe, was schlichtweg falsch ist.

    LordJaxom schrieb:

    Aber nicht den operator=.

    Ja, aber das hat imho nichts damit zu tun, ob der operator binär oder unär ist, und somit ist die Schlussfolgerung falsch.



  • Wo ich das lese, frage ich mich was mich da vorhin geritten hat. Der Operator ist natürlich binär, die Funktion operator= kann aber nur eine nichtstatische Membunktion sein. Sorry.



  • Ok, dann hat sich das ja aufgeklärt. 😉

    Hatte mich schon gewundert, dass du geschrieben hattest:

    LordJaxom schrieb:

    Sagte ich, ja.



  • Sry war mir entfallen dass op= nicht global möglich ist

    Kopf->Tisch


Anmelden zum Antworten