gpt4 book ai didi

c++ - (c++) 需要帮助为我的类 Polynomial 重载 operator+

转载 作者:太空宇宙 更新时间:2023-11-04 16:06:41 24 4
gpt4 key购买 nike

因此,我试图为我的多项式数组重载运算符 +,但我不断收到 _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) 错误(第 52 行),我无法弄清楚原因。问题一定出在我重载 operator+ 的方式上,因为没有它就不会发生。

class Polynomial

{
public:
int compo;
int expo;
int size; // array size + largest exponent
friend ostream &operator<<(ostream&, const Polynomial &);
friend istream &operator>>(istream&, Polynomial &);
int* arr;
Polynomial();
Polynomial(int);
Polynomial(const Polynomial&);
~Polynomial();
int getSize();
Polynomial operator+(const Polynomial &);


private:


};

...

Polynomial Polynomial::operator+(const Polynomial &p)
{
Polynomial p1;
for (int i = 0; i < p1.size; i++)
{
p1.arr[i] = arr[i] + p.arr[i];
}
return p1;
}

main(只是为了检查发生了什么):

int main()
{
Polynomial p;
p.arr[2] = 4;
p.arr[0] = 4;
cout << p;
cout << "Enter compo, expo:\n";
cin >> p;
Polynomial z;
z = z + p;
cout << z;
return 0;
}

构造函数:

Polynomial::Polynomial()
{
size = 100;
arr = new int[size];
}

Polynomial::Polynomial(int a)
{
size = a;
arr = new int[size];
}

复制构造函数:

Polynomial::Polynomial(const Polynomial& p)
{
arr = p.arr;
size = p.size;
}

析构函数:

Polynomial::~Polynomial()
{
delete[] arr;
}

辛:

istream &operator>>(istream &input, Polynomial &p)
{
input >> p.compo;
input >> p.expo;
if (p.expo > p.size+1)
{
int *temp;
p.size = p.expo + 1;
temp = new int[p.expo + 1];
for (int i = 0; i < p.expo+1; i++)
{
temp[i] = p.arr[i];
}
delete[] p.arr;
p.arr = temp;
}
p.arr[p.expo] = p.compo;
return input;
}

最佳答案

复制构造函数似乎有问题。

Polynomial::Polynomial(const Polynomial& p)
{
arr = p.arr;
size = p.size;
}

有了这个,你分配的是指针,而不是数组。一个元素一个元素地循环执行

Polynomial::Polynomial(const Polynomial& p)
{
compo = p.compo;
expo = p.expo;
size = p.size;
arr = new int[size];
for(int i = 0; i< size; ++i)
arr[i] = p.arr[i];

}

关于c++ - (c++) 需要帮助为我的类 Polynomial 重载 operator+,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34095540/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com