[問題] Operator overloading 加/減法 回傳的問題
開發平台(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
04/18 00:05, 1F
→
04/18 00:05, , 2F
04/18 00:05, 2F
→
04/18 00:11, , 3F
04/18 00:11, 3F
→
04/18 00:12, , 4F
04/18 00:12, 4F
→
04/18 00:40, , 5F
04/18 00:40, 5F