1.代码
class complex
{
public complex (double r=0,double i=0)/*pass by value*/
: re (r), im(i){}
complex& operator +=(const complex&);/*return by reference*/
double real () const { return re}/*return by value*/
double imag () const{ return im}/*return by value*/
private:
re, im;
friend complex&__doapl(complex*,const complex&);/*pass by reference*/
};
{
complex c1(2.5 ,1.5);
}
inline complex&
__doapl(complex* ths,const complex& r)
{
ths->re +=r.re;/*将r和ths相加的值给ths*/
ths->im +=r.im;
return *ths;/*指针形式传递,reference形式接收以提高传输速度*/
}
inline complex&
complex::operator +=(const complex& r)
{
return __doapl(this,r);
}
总结
pass by reference,就是封装的指针,指针大小一般小于所需要传输的数据,引用时,假设要传递一个1MB的数据,传值就是直接传递1MB,pass by reference就相当于把电脑中所储存的1MB的地址传递出去,大大提高了传输速度
照目前理解,传输/返回的时侯在变量类型后加&就变成的pass/return by reference。
complex& operator +=(const complex&);
左边的complex是pass by reference,右边的complex是return by reference
在pass时尽量采用reference,但在return的时候,有小半数的情况是不允许return by reference,需注意
+=这种操作会将+=左边的参数值改变,右边的参数不变,在函数中,c3=c1+c2此时c1/c2的值不会改变,但c3的值因为是局部变量,就不能pass by reference因为函数结束后c3就不存在了
除了这种情况,都可以pass by reference,侯捷老师是这么说的,我理解的意思是pass by reference类似指针,在地址被传送出去时原来地址上的东西不能改变否则就会报错,如上面提到的局部变量。