[問題] 關於C++的operator

看板C_and_CPP作者 (zxcv87901)時間5年前 (2018/06/28 22:35), 編輯推噓1(1022)
留言23則, 4人參與, 5年前最新討論串1/1
開發平台(Platform): (Ex: Win10, Linux, ...) Win10 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) VC++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) iostream 問題(Question): 我正在打大數的作業,全部運算子都已經打好了,但是在等號如果左右兩邊接著同名變數時 n1就會變成00000 以下範例為預設n1以及n2是2和3 想請問是哪裡漏打或是多打了什麼 餵入的資料(Input): BigNUM n1(2),n2(3); n1 = n1 + n2; 預期的正確結果(Expected Output): 5 錯誤結果(Wrong Output): 0 程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔) BigNUM & BigNUM::operator = (const BigNUM &copy) { digits = copy.digits; sign = copy.sign; store = new char[space]; set_zero(); for (int i = 0; i < digits; i++) { store[i] = copy.store[i]; } return *this; } 補充說明(Supplement): set_zero()函式是將陣列裡面的值都預設為0 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.229.109.9 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1530196539.A.4E4.html

06/28 22:52, 5年前 , 1F
研究了一下水晶球,問題應該出在store
06/28 22:52, 1F

06/28 22:54, 5年前 , 2F
你那個沒寫出來的operator+回傳的那個臨時物件,它的s
06/28 22:54, 2F

06/28 22:54, 5年前 , 3F
tore跟n1的store是使用同一份
06/28 22:54, 3F

06/28 22:55, 5年前 , 4F
要是我的推測沒錯,你得再寫一個copy ctor
06/28 22:55, 4F

06/28 22:55, 5年前 , 5F
你的operator+寫了什麼東西呢?
06/28 22:55, 5F

06/28 22:57, 5年前 , 6F
operator+中間寫了加法的運算,最後是 return *this
06/28 22:57, 6F

06/28 22:58, 5年前 , 7F
所以照love大的回答,我每一種運算回傳*this才造成結果
06/28 22:58, 7F

06/28 22:59, 5年前 , 8F
你先把store跟copy.store的位址印出來看看,一樣的話
06/28 22:59, 8F

06/28 22:59, 5年前 , 9F
就是我講的問題
06/28 22:59, 9F

06/28 23:05, 5年前 , 10F
另外是"new char[space]{}"就能清0,用不著再寫一個
06/28 23:05, 10F

06/28 23:05, 5年前 , 11F
函數
06/28 23:05, 11F

06/28 23:09, 5年前 , 12F
operator+不應該回傳*this
06/28 23:09, 12F

06/28 23:12, 5年前 , 13F
回love大,位址一樣沒錯...但是我寫了一個copy ctor
06/28 23:12, 13F

06/28 23:12, 5年前 , 14F
目前結果還是一樣...是沒有傳對的意思嗎 ?!
06/28 23:12, 14F

06/28 23:16, 5年前 , 15F
解決了 !!! 感謝樓上幾位大大
06/28 23:16, 15F

06/28 23:18, 5年前 , 16F
不知道從何講起,如果是直接照你原本的做法,那就是寫
06/28 23:18, 16F

06/28 23:18, 5年前 , 17F
copy ctor確保stor不是同一份
06/28 23:18, 17F

06/28 23:20, 5年前 , 18F
但operator+其實是不應該設計成成員的,不過我懶得從
06/28 23:20, 18F

06/28 23:20, 5年前 , 19F
頭說明怎麼設計
06/28 23:20, 19F

06/28 23:49, 5年前 , 20F
精華區4-13-3-3 原PO可以看一下這篇XD
06/28 23:49, 20F

06/29 08:20, 5年前 , 21F
如何設計operator跟rule of five,原po同時遇到這兩
06/29 08:20, 21F

06/29 08:20, 5年前 , 22F
個問題
06/29 08:20, 22F

06/29 08:24, 5年前 , 23F
Exceptional C++ item 20有提怎麼設計operator
06/29 08:24, 23F
文章代碼(AID): #1RDF8xJa (C_and_CPP)