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
-
c++ kennt keine properties, aber du kannst es nachbauen: http://www.codeproject.com/cpp/cppproperties.asp
http://www.codeguru.com/cpp/cpp/algorithms/general/article.php/c13039/

-
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 wieCPerson 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