我在我的多项式类中遇到了一些重载* =运算符的问题。我已经包含了我认为与解决下面问题相关的所有内容。我为代码的长度道歉。
以下是我认为相关的课程标题部分。
#ifndef POL_H
#define POL_H
#include <string>
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
class Pol
{
// private data members
string polname; // polynomial name
int degree; // polynomial degree
int *coef; // array with polynomial coefficients
public:
// constructors
Pol(string, int, int*); // with input name, degree
// and array of coefficients
// operator overloading
Pol operator *= (Pol);
// other methods
void PrintPol ();
这是我的.C文件,重载为* =。我决定不包括PrintPol方法,因为它很长,我几乎100%确定问题不在于它。
#include "Pol.h"
Pol::Pol (string s, int d, int *c)
{
degree = d;
polname = s;
coef = new int [degree + 1];
coef = c;
// initializes polynomial of degree d with c coefficients
// named s
}
Pol Pol::operator *= (Pol p1)
{
int *cp = this->coef; // If I print the values stored in cp at this point
// everything is alright
for (int i = p1.degree; i >= 0; --i)
{
for (int j = this->degree; j >= 0; --j)
{
this->coef[i + j] += p1.coef[i] * cp[j];
cout << cp[j] << endl; // When I print the values here, they've changed!
}
}
this->degree += p1.degree;
return *this;
}
我的第一个想法是,也许我超越了数组的界限,但我创建的数组cp的大小是this-&gt; degree,这也是&#34; j&#34;假设,所以我认为不可能。
这是我的主要功能。我怀疑问题出在这里,但无论如何我都把它包括在内,所以你可以看到我是如何使用我所声明的方法的。
#include "Pol.h"
#include <iostream>
using namespace std;
int main ()
{
int a [9] = {0, 0, 2, 4, 0, 0, 5, 0, 1};
int b [5] = {4, -2, 0, 0, 1};
Pol P2 ("P2", 4, b);
Pol P4 ("P4", 8, a);
P4*= P2;
P4.PrintPol();
return 0;
}
这可能是非常明显的,而且我只是在做自己的屁股,但我已经盯着代码几个小时了,我无法弄清楚。提前谢谢。
答案 0 :(得分:1)
您问的是*=
超载,但问题与*=
无关。你说你的数组值正在自发地变化#34;但是你自己在代码中自己更改它们。
int *cp = this->coef; // "If I print the values stored in cp at this point
// everything is alright"
for (int i = p1.degree; i >= 0; --i) {
for (int j = this->degree; j >= 0; --j) {
this->coef[i + j] += p1.coef[i] * cp[j]; // <-- Well, you changed them here mate
cout << cp[j] << endl; // "When I print the values here, they've changed!"
}
}
从您评论coef
声明的方式:
int *coef; // array with polynomial coefficients
您似乎认为coef
是一个数组;不是。您似乎也认为将coef
分配给另一个int*
会复制它指向的基础数据;它不会。
coef
是一个指针,并将其指定给另一个指针只是复制指针。
尝试像其他人一样使用std::vector
,以便为您管理数据所有权和生命周期,以便您可以利用基本的分配操作。