【发布时间】:2016-12-06 05:19:52
【问题描述】:
我创建了一个命名空间,并在该命名空间内创建了一个类。该类称为多项式。我创建了公共成员运算符来执行多项式对象之间的算术运算。但是,当我尝试在 main 中使用它们时,它们并没有给出正确的输出。
我不确定我的错误是在定义上还是在使用它们的方式上。
这是我正在处理的文件的一部分:
标题 |多项式.h
#ifndef _POLYNOMIAL_H_
#define _POLYNOMIAL_H_
//...
namespace algebra {
class polynomial {
std::vector<double> coeffStorage;
public:
//...
double operator()(double x);
polynomial operator+(polynomial p);
polynomial& operator+=(polynomial p);
polynomial operator-();
polynomial operator-(polynomial p);
polynomial& operator-=(polynomial p);
polynomial operator*(polynomial p);
polynomial& operator*=(polynomial p);
};
polynomial operator+(double c, polynomial p);
polynomial operator*(double c, polynomial p);
//...
}
#endif
cpp |多项式.cpp
//...
//evaluates the polynomial at x
double algebra::polynomial::operator()(double x) {
double result = 0;
for (int i = 0; i < size(); i++)
result += std::pow(x, i) * getCoeff(i);
return result;
}
algebra::polynomial algebra::polynomial::operator+(algebra::polynomial p) {
algebra::polynomial result;
result.resize(degree() + p.degree() + 1);
for (int i = 0; i < result.size(); i++)
result.setCoeff(i, (getCoeff(i) + p.getCoeff(i)));
return result;
}
algebra::polynomial& algebra::polynomial::operator+=(algebra::polynomial p) {
return ((*this) = (*this) + p);
}
algebra::polynomial algebra::polynomial::operator-() {
algebra::polynomial result;
for (int i = 0; i < size(); i++)
result.setCoeff(i, -1 * getCoeff(i));
return result;
}
algebra::polynomial algebra::polynomial::operator-(algebra::polynomial p) {
return ((*this) + -p);
}
algebra::polynomial& algebra::polynomial::operator-=(algebra::polynomial p) {
return ((*this) = (*this) - p);
}
algebra::polynomial algebra::polynomial::operator*(algebra::polynomial p) {
algebra::polynomial result;
double coeffSum = 0.0;
result.resize(degree() + p.degree() + 1);
for (int i = 0; i < result.size(); i++) {
coeffSum = 0;
for (int j = 0; j <= i; j++) {
coeffSum = getCoeff(j) * p.getCoeff(i - j);
}
result.setCoeff(i, coeffSum);
}
return result;
}
algebra::polynomial& algebra::polynomial::operator*=(algebra::polynomial p) {
return ((*this) = (*this) * p);
}
algebra::polynomial algebra::operator+(double c, polynomial p) {
algebra::polynomial result = p;
result.setCoeff(0, c + p.getCoeff(0));
return result;
}
algebra::polynomial algebra::operator*(double c, polynomial p) {
algebra::polynomial result = p;
for (int i = 0; i < result.size(); i++)
result.setCoeff(i, c * p.getCoeff(i));
return result;
}
//...
多项式的系数存储在向量中。每个索引都属于多项式的次数。例如,2x^2 + 3 看起来像 3*x^0 + 0*x^1 + 2*x^2,它在向量上存储为 {3.0, 0.0, 2.0}。
我打算在 main 中使用如下操作符:
algebra::polynomial p2;
p2.setCoeff(0, 1);
p2.setCoeff(1, 1);
algebra::polynomial p3;
p3.setCoeff(0, -1);
p3.setCoeff(1, 1);
algebra::polynomial px;
px = p2 + p3;
algebra::polynomial py;
py = p3 * p2;
但是 px 和 py 原来是空的。
【问题讨论】:
-
能发minimal reproducible example就更好了。
-
每一步的输入输出都验证了吗?即 setCoeff 设置是否正确等?
标签: c++