C++ 如何重载+=运算符以返回字符串?

C++ 如何重载+=运算符以返回字符串?,c++,overloading,operator-keyword,C++,Overloading,Operator Keyword,我有一个简单的问题:如何重载+=运算符以返回字符串。这是我尝试过的,但没有成功 Student& Student::operator+=(const Student& RHS) { string temp_string; temp_string = "( " + RHS.get_name() + ", " + RHS.get_grade() + ") "; return temp_string;

我有一个简单的问题:如何重载+=运算符以返回字符串。这是我尝试过的,但没有成功

Student& Student::operator+=(const Student& RHS)
{
    string temp_string;
    temp_string = "( " + RHS.get_name() + ", " + RHS.get_grade() + ") ";
    return temp_string;
}
纯技术:

// 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;
}
但是:

这是什么意思?首先,两个学生加起来的结果一般是什么?另一个学生?你会如何用人类语言来解释?已经开始让人困惑了。然后查看以下内容:

int x = 10;
x += 12;
您希望x之后保持值22。特别是:x被修改了,除非你加了零。。。。相比之下,您的操作员不会以任何方式修改此内容-它甚至不会查看。。。你如何理解现在增加另一个学生?特别是:如果运算符+接受两个学生,您可以返回某种类型的配对或家庭,但是使用+=,更改结果类型???如果x+=7没有修改x,但返回了一个double怎么办?你看到这一切变得多么混乱了吗

另一方面,我可以想象,您实际上正在寻找显式强制转换操作符:

operator std::string()
{
    std::string temp_string;
    temp_string = "( " + this->get_name() + ", " + this->get_grade() + ") ";
    return temp_string;
}
这样,您可以将一个学生添加到字符串中,例如。G像这样:

Student s;
std::string str;
str += s;
或者您希望将学生传递到输出流?那么这个,

std::ostream& operator<<(std::ostream& stream, Student const& s)
{
    stream << "( " << s.get_name() << ", " << s.get_grade() << ") ";
    return stream;
}
使用上述方法,您可以将强制转换操作符减少为:

operator std::string()
{
    std::ostringstream s;
    s << *this;
    return s.str();
}
甚至可以有一个班轮:

operator std::string()
{
    return static_cast < std::ostringstream& >(std::ostringstream() << *this).str();
}

好吧,我承认,如果这个类型真的更好,那么必要的是有争议的…

将返回类型更改为std::string?@NathanOliver你是怎么想到这个主意的?好吧,记住这将是令人困惑和意外的。看起来您甚至没有修改当前对象。我非常建议不要这样做。也不要在一个临时的。。。你在劫持+=操作员。不建议。在你写这篇文章之前,你应该后退一步,问问自己将一个学生添加到另一个学生中意味着什么。很可能您希望使用命名函数,而不是运算符重载。谢谢您的反馈,我非常感谢:我将仔细研究您所说的内容。诚然,我不太擅长重载,因此您的解释确实有帮助。因此我实现了:运算符std::string{std::string temp_string;temp_string=+this->get_name+,+this->get_grade+;return temp_string;}它工作得很好,但是get_grade会返回一个浮点值。你知道如何在这个上下文中将其转换成字符串吗?谢谢!@SamTalbot std::to_string?注意,临时字符串是不必要的,你只需返回+…我目前正在处理的作业不会在C++11上评分,而是一个旧版本,我认为它不支持吴荣奎:/