[学习笔记]关于operator和&operator,以及const参数的问题
区别:
operator返回值是值
&operator返回值是引用(地址),返回引用是为了能够连续赋值
返回引用是为了能够连续赋值 如(a=b)=c,如果不返回引用的话像楼上说的那样,*this是当做临时变内量返回的容,C++为了保证临时变量从产生到返回不被修改,从而把临时变量定义为const,因而(a=b)=c的话,a=b为一个const,c是不能赋值给他的。
例:MyMatrix &operator=(const MyMatrix &b)
今天给舍友debug遇到的这个问题
题目是用运算符重载计算矩阵连续相乘。检查完代码发现,重载完星号*之后返回的内容是没问题的,但是输出的时候有问题,输出了很大的数字(这种一般是越界或没赋值成功)。
错误结果:

正确答案:
3 2
3 2
经过检查发现,是拷贝的时候出了问题。
这里没有重载=,也没有写拷贝构造函数,导致=发生的是浅拷贝,而类中的矩阵所占的空间是new出来的,这里拷贝仅仅是把地址复制了过去,并没有成功地把内容复制过去。
解决办法是重载=,让参数的data[][]复制给*this的data[][]。

重载=时也遇到了一些问题
最开始重载等号的代码:
MyMatrix operator=(MyMatrix &b)
这样的代码是会报错的,因为写重载*时没有用&operator而是写的operator,由于上面提到的c++的特性,q1*q2得到的返回值会是一个const,所以这里=接收的参数也得是一个const才行。
另外如果不加&也会出现不可预知的错误。
总之,写等号重载的时候记住这种标准写法:
MyMatrix &operator=(const MyMatrix &b)
改正以后成功输出正确答案:

PS:以上内容为个人见解,如有错误欢迎指出