作者jackwei (吐司)
看板C_and_CPP
標題[問題] Operator overloading 加/減法 回傳的問題
時間Sun Apr 17 23:37:17 2011
開發平台(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)
→ bleed1979:是否為copy constructor的問題。 04/18 00:05
→ akasan:operator= 跟 copy ctor 有寫嗎? 04/18 00:05
→ jackwei:orz operator=有寫 但是忘了copy ctor了.... 04/18 00:11
→ jackwei:加了以後就正常了 感謝 抱歉有點蠢XD~ 04/18 00:12
→ hilorrk:operator= copy ctor dtor通常都要一起想到 04/18 00:40