如何重载+=操作符以返回字符串

How to overload += operator to return a string?

本文关键字:操作符 返回 字符串 何重载 重载      更新时间:2023-10-16

我只是有一个快速的问题:我如何重载+=操作符来返回字符串。这是我试过的,但没有成功。

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被修改了(除非你加了零…)。相反,你的运算符不会以任何方式修改this——它甚至不会看……你如何理解现在又增加了一个学生到this ?特别是:对于接受两个学生的运算符+,您可以返回某种类型的对或族,但是使用+=,更改结果类型??如果x += 7没有修改x,而是返回一个双精度值,那会怎么样?你知道这有多混乱吗?

另一方面,我可以想象,您实际上是在寻找显式强制转换操作符,而不是:
operator std::string()
{
    std::string temp_string;
    temp_string = "( " + this->get_name() + ", " + this->get_grade() + ") ";
    return temp_string;
}

这样,你就可以将学生添加到字符串中,例如:

Student s;
std::string str;
str += s;

或者您想将student传递到输出流?那么这个:

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();
}