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::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那里明明拷贝了一个,为什么还是不行呢?
...全文
相关推荐
C++运算符重载详解[代码]
文章指出,前置递增运算符重载返回的是对象的引用,而后置递增运算符重载则需要一个无用的整型参数来区分其为后置版本。这使得后置版本需要返回对象的一个临时副本,这在实现时需要特别注意。
重载运算符 赋值运算符.cpp
通过重载,程序员可以使得自定义类型的表现更加直观,操作更加方便。例如,在处理复数类时,定义加号运算符(+)允许两个复数相加,而赋值运算符(=)则允许将一个复数对象的值复制给另一个复数对象。
C++友元与运算符重载.pdf
友元函数常用于重载运算符时,使得非成员函数能够操作类对象的私有或保护成员。运算符重载则是允许开发者为自定义类型赋予标准C++运算符的特殊意义。例如,可以重载加号运算符来实现两个自定义对象相加的功能。
c++练习题word文档
这些题目涵盖了C++的基本概念,如函数、运算符重载、内存管理、流类和文件操作,以及数组和指针的使用。通过深入理解和解答这些问题,学生可以增强对C++核心概念的理解。
C++测试题(含答案).pdf
重载加号操作符`+`,通常需要定义为类的成员函数,并接受一个类的对象作为参数,返回值是操作后的结果。因此,正确的声明是选项B。4.


