Rein technisch:
// v NO reference here!
std::string Student::operator+=(const Student& rhs)
{
string temp_string;
temp_string = "(" + rhs.get_name() + ", " + rhs.get_grade() + ") ";
return temp_string;
}
ABER:
Was soll die Bedeutung dieses sein? Erstens, was ist das Ergebnis der Summe von zwei Studenten im Allgemeinen? Ein anderer Schüler? Wie würdest du das in der menschlichen Sprache interpretieren? Fängt schon verwirrend an. Dann werfen Sie einen Blick auf die folgenden:
int x = 10;
x += 12;
Sie erwarten x
danach den Wert zu halten, 22. Insbesondere: x wurde geändert (es sei denn, Sie hinzugefügt Null ...). Ihr Operator ändert im Gegensatz this
in keiner Weise - es sieht nicht einmal ... Wie würden Sie das Hinzufügen eines anderen Schülers zu this
jetzt interpretieren? Vor allem: Mit einem Operator + akzeptieren zwei Studenten, könnten Sie eine Art von Paar oder Familie zurückgegeben haben, aber mit + =, Ändern der Ergebnisart ??? Was ist, wenn x += 7
x nicht geändert hat, aber ein Double zurückgegeben hat? Siehst du, wie verwirrend das alles wird?
Auf der anderen Seite, könnte ich mir vorstellen, aber, dass Sie tatsächlich für die explizite Cast-Operator statt suchen:
operator std::string()
{
std::string temp_string;
temp_string = "(" + this->get_name() + ", " + this->get_grade() + ") ";
return temp_string;
}
Auf diese Weise Sie einen Schüler in eine Zeichenfolge, e hinzufügen könnte. G. wie folgt:
Student s;
std::string str;
str += s;
Oder möchten Sie Schüler an Ausgangsströme übergeben? Dann folgt aus:
std::ostream& operator<<(std::ostream& stream, Student const& s)
{
stream << "(" << s.get_name() << ", " << s.get_grade() << ") ";
return stream;
}
Mit oben, könnten Sie Cast-Operator zu reduzieren:
operator std::string()
{
std::ostringstream s;
s << *this;
return s.str();
}
Es ist sogar möglich, ein Motto zu haben:
operator std::string()
{
return static_cast < std::ostringstream& >(std::ostringstream() << *this).str();
}
Nun, zugegeben, wenn es wirklich netter mit dieser Besetzung notwendig ist diskutierbar ...
Ändern Sie den Rückgabetyp zu einem 'std :: string'? – NathanOliver
@NathanOliver Wie bist du auf diese Idee gekommen? o_o – DeiDei
Denken Sie daran, dies wird verwirrend und unerwartet sein. Es sieht so aus, als ob Sie nicht gerade das aktuelle Objekt verändern. Ich würde sehr empfehlen, dies nicht zu tun. – Falmarri