如何重载+=操作符以返回字符串
How to overload += operator to return a 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被修改了(除非你加了零…)。相反,你的运算符不会以任何方式修改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();
}
相关文章:
- 如何使操作符[]返回对unsigned int中单个位的引用
- 下标操作符重载:返回引用问题
- 在类赋值操作符函数中,为什么必须返回*this ?
- 返回指向类定义的结构体的指针,多个作用域操作符
- c++的new操作符保证返回的指针不会改变它的值吗?
- 返回void的预增量操作符
- 为什么模板化的用户定义转换操作符能够确定其返回类型?
- 如何重载+=操作符以返回字符串
- 只写对象的链接操作符= - OK返回rhs而不是*this
- 返回值的引用操作符
- c++模板操作符重载不同类型,自动返回类型
- c++ std::map::iterator一无所获,但下标操作符返回对映射值的引用
- 重载操作符返回类型
- QMap/QHash操作符[]返回引用有效性
- new操作符返回什么?
- 如何使子类上的操作符返回子类类型?
- 是否允许修改c++ 11中操作符[]返回的内部std::string缓冲区?
- 操作符返回值问题
- 当我从赋值操作符返回值时,首先,调用复制构造函数的机制和基础是什么?
- 为什么操作符=返回对*this的引用而不是对*this的对象?