+=的重载

来源:百度知道 编辑:UC知道 时间:2024/04/30 13:47:45
已经重载过加法和赋值运算符(均声明为友元),可否简化+=的重载?
比如:
const String &String::operator+=( const String &right )
{
String a = *this;
a = a + right;
}
可能我写的语法有问题,我的意思是如何避免重写加法算法?
我按你的方法做了,结果
Funnystring &Funnystring::operator+=( const Funnystring &right )
{
return ( *this + right );
}

它报warning C4172: returning address of local variable or temporary。测试时,a += b就只输出a本身了。
是不是不能把加法重载为友元?

Funnystring &Funnystring::operator+=( const Funnystring &right )
{
return ( *this + right );
}
应该修改为
Funnystring &Funnystring::operator+=( const Funnystring &right )
{
(*this) = (*this) + right;
return (*this);
}
原因是+=这个是二元运算符号
其实所作的运算是
a = b += c;
你可以把+=看做一种特殊的加号,但是这种特殊的加号左值会变成左值加上右值,所以一般情况下a都省略不写。
在重载时应该是这样的:
返回值相当于是a = b += c;中的a
(*this)相当于a = b += c;中的b
right相当于a = b += c;中的c
不知道我讲明白了没有

const String &String::operator+=( const String &right )
{
String a = *this;
a = a + right;
}
这样写有问题
String a = *this;
会调用拷贝构造函数
a 是临时量,但是你的返回类型为& ->错误
如果要a=a+right;
你还要写另一个重载;
-------------------------------------------
一般的写法是:
const String &String::operator+=( const String &right ) {
this->成员+=right.成员;
return *this;
}

楼上说明的已经很清楚了!
需不需要重载"+",要看C++基本语法中是不是定义这样的类型直接相加!
因为你的Funstring