复合赋值操作符是指 +=,*=,-=这一类由基本算数运算符(+、-、*、/)或位运算符(|、&、~等)加=号构成的运算符。
它们把左右操作数进行相应运算后的结果赋值给左操作符。例如:a+=b; 意味着 a=a+b;
复合赋值操作符的返回值,默认是左值。比如a+=b;中的a。
在进行复合赋值操作符重载定义的时候,需要注意,其返回值,应该为(*this)<类成员>或者第一个也就是左操作数<非成员函数>。例如:(假设已经自定义算数或位操作运算符)
CLASSNAME & CLASSNAME::operator +=(CLASSNAME & right){
return (*this) = (*this)+right;
}
CLASSNAME & operator +=(CLASSNAME & left,CLASSNAME & right){
return left = left+right;
}
CLASSNAME A=a,B=b;(A,B是对象名,a,b是值)
A+=B;(此时A=a+b,整个表达式返回值是a+b)
重写复合赋值操作符的时候,一定要记得,要把运算结果赋给左值,再返回左值。如果直接返回结果,我们将不会被调用处看到左值被运算的效果。错误代码:(假设已经自定义算数或位操作运算符)
CLASSNAME & CLASSNAME::operator +=(CLASSNAME & right){
return (*this)+right;
}
CLASSNAME & operator +=(CLASSNAME & left,CLASSNAME & right){
return left+right;
}
CLASSNAME A=a,B=b;(A,B是对象名,a,b是值)
A+=B;(此时A=a,整个表达式返回值是a+b)