五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網 會員登陸 & 注冊

[學習筆記]關于operator和&operator,以及const參數的問題

2023-06-11 21:28 作者:哎喲鴿鴿周杰倫  | 我要投稿

區(qū)別:
operator返回值是值

&operator返回值是引用(地址),返回引用是為了能夠連續(xù)賦值

返回引用是為了能夠連續(xù)賦值 如(a=b)=c,如果不返回引用的話像樓上說的那樣,*this是當做臨時變內量返回的容,C++為了保證臨時變量從產生到返回不被修改,從而把臨時變量定義為const,因而(a=b)=c的話,a=b為一個const,c是不能賦值給他的。

例:MyMatrix &operator=(const MyMatrix &b)

今天給舍友debug遇到的這個問題

題目是用運算符重載計算矩陣連續(xù)相乘。檢查完代碼發(fā)現,重載完星號*之后返回的內容是沒問題的,但是輸出的時候有問題,輸出了很大的數字(這種一般是越界或沒賦值成功)。

錯誤結果:

正確答案:

3????2

3????2????

經過檢查發(fā)現,是拷貝的時候出了問題。

這里沒有重載=,也沒有寫拷貝構造函數,導致=發(fā)生的是淺拷貝,而類中的矩陣所占的空間是new出來的,這里拷貝僅僅是把地址復制了過去,并沒有成功地把內容復制過去。

解決辦法是重載=,讓參數的data[][]復制給*this的data[][]。

重載=時也遇到了一些問題

最開始重載等號的代碼:

MyMatrix operator=(MyMatrix &b)

這樣的代碼是會報錯的,因為寫重載*時沒有用&operator而是寫的operator,由于上面提到的c++的特性,q1*q2得到的返回值會是一個const,所以這里=接收的參數也得是一個const才行。

另外如果不加&也會出現不可預知的錯誤。

總之,寫等號重載的時候記住這種標準寫法:

MyMatrix &operator=(const?MyMatrix &b)

改正以后成功輸出正確答案:

PS:以上內容為個人見解,如有錯誤歡迎指出

[學習筆記]關于operator和&operator,以及const參數的問題的評論 (共 條)

分享到微博請遵守國家法律
永州市| 南皮县| 桐乡市| 栾川县| 盐边县| 隆子县| 遵义县| 新密市| 山西省| 稻城县| 庆元县| 万盛区| 普陀区| 永宁县| 绥阳县| 安西县| 策勒县| 南乐县| 德阳市| 锡林郭勒盟| 台北县| 保靖县| 延津县| 白河县| 涞水县| 肥西县| 泗洪县| 陈巴尔虎旗| 韶关市| 社旗县| 绍兴县| 崇阳县| 宜黄县| 阳曲县| 泉州市| 蛟河市| 元阳县| 利川市| 堆龙德庆县| 增城市| 夏邑县|