C++重载加号运算符返回时遇到的有关问题
C++重载加号运算符返回时遇到的问题
代码如下:
BigNumber BigNumber::operator+( BigNumber& r )
{
Invert(r.data);//倒置
Invert(data);
int len = (int)strlen(data);
int r_len = (int)strlen(r.data);
char* temp = new char[len * r_len];
int b = 0;
for(int i = 0; i < max(len, r_len); i++){
int t = (isOk(*(this->data + i)) - '0') + (isOk(*(r.data + i)) - '0') + b;
if(t >= 10) b = 1;
else b = 0;
*(temp + i) = t % 10 + '0';
}
if(b){
*(temp + max(len, r_len)) = '1';
*(temp + max(len, r_len) + 1) = 0;
}else *(temp + max(len, r_len)) = 0;
Invert(r.data);
Invert(data);
Invert(temp);
BigNumber end(temp);
delete[len * r_len]temp;
return end;//此句要进拷贝构造函数,再进析构函数
}
返回给调用处的data是0XCCCCCCCC。
我就不明白了,在return那里明明拷贝了一个,为什么还是不行呢?
------解决方案--------------------
BigNumber::BigNumber( BigNumber& bigNum )
{
data= new char[strlen(bigNum.data)+1];
strncpy(data,bigNum.data,strlen(bigNum.data));
}
大概意思是这样了。
------解决方案--------------------
BigNumber::BigNumber( BigNumber& bigNum )
{
BigNumber(bigNum.data);
}
你以为红色部分是调用了BigNumber::BigNumber( char* array_num )这个函数,设置data,但实际上是产生了个BigNumber临时对象。
代码如下:
BigNumber BigNumber::operator+( BigNumber& r )
{
Invert(r.data);//倒置
Invert(data);
int len = (int)strlen(data);
int r_len = (int)strlen(r.data);
char* temp = new char[len * r_len];
int b = 0;
for(int i = 0; i < max(len, r_len); i++){
int t = (isOk(*(this->data + i)) - '0') + (isOk(*(r.data + i)) - '0') + b;
if(t >= 10) b = 1;
else b = 0;
*(temp + i) = t % 10 + '0';
}
if(b){
*(temp + max(len, r_len)) = '1';
*(temp + max(len, r_len) + 1) = 0;
}else *(temp + max(len, r_len)) = 0;
Invert(r.data);
Invert(data);
Invert(temp);
BigNumber end(temp);
delete[len * r_len]temp;
return end;//此句要进拷贝构造函数,再进析构函数
}
返回给调用处的data是0XCCCCCCCC。
我就不明白了,在return那里明明拷贝了一个,为什么还是不行呢?
------解决方案--------------------
BigNumber::BigNumber( BigNumber& bigNum )
{
data= new char[strlen(bigNum.data)+1];
strncpy(data,bigNum.data,strlen(bigNum.data));
}
大概意思是这样了。
------解决方案--------------------
BigNumber::BigNumber( BigNumber& bigNum )
{
BigNumber(bigNum.data);
}
你以为红色部分是调用了BigNumber::BigNumber( char* array_num )这个函数,设置data,但实际上是产生了个BigNumber临时对象。