[問題] Operator overloading 加/減法 回傳的問題

看板C_and_CPP作者 (吐司)時間14年前 (2011/04/17 23:37), 編輯推噓0(005)
留言5則, 4人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Dev-c++ 問題(Question): 寫了一個 Class BigNumber 當中含有 bool pointer 指向動態陣列 卻不知道如何正確的寫 overloading 加法 Class BigNumber { public: .....//該有的都有 const BigNumber operator+ (const BigNumber &rhs) const; const BigNumber operator- (const BigNumber &rhs) const; ..... private: bool* stream; //stream[0] is LSB int length; static const int maxLength = 320; }; BigNumber::BigNumber(int i) { stream = new bool [maxLength]; length = 0; ........ //設定stream和length } BigNumber::~BigNumber() {delete [] stream;} 接著是關鍵的加法 const BigNumber BigNumber::operator+ (const BigNumber &rhs) const { BigNumber sum; ....... //設定sum 的內容 return sum; } 減法類似寫法 預期的正確結果(Expected Output): 加減都正確 錯誤結果(Wrong Output): 加法雖然有正確結果 減法卻會出錯 (我猜加法正確純粹是運氣好?) BigNumber a(14); BigNumber b(12); cout<< a+b <<endl; //印出 26 的二進位 沒錯 cout<< a-b <<endl; //印出一些垃圾 自己的猜想是因為 BigNumber::operator+ return 的時候 物件 sum 的 destructor 啟動,所以在 main 中拿倒垃圾 試著用 BigNumber* num = new BigNumber(); ... return *sum; 的方法 雖然會成功 但是要什麼時候 delete ? 不好意思 應該是很基本的觀念問題 請大家幫忙解惑吧 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.168.235.39 ※ 編輯: jackwei 來自: 118.168.235.39 (04/17 23:37) ※ 編輯: jackwei 來自: 118.168.235.39 (04/17 23:38)

04/18 00:05, , 1F
是否為copy constructor的問題。
04/18 00:05, 1F

04/18 00:05, , 2F
operator= 跟 copy ctor 有寫嗎?
04/18 00:05, 2F

04/18 00:11, , 3F
orz operator=有寫 但是忘了copy ctor了....
04/18 00:11, 3F

04/18 00:12, , 4F
加了以後就正常了 感謝 抱歉有點蠢XD~
04/18 00:12, 4F

04/18 00:40, , 5F
operator= copy ctor dtor通常都要一起想到
04/18 00:40, 5F
文章代碼(AID): #1DgmalDu (C_and_CPP)