【发布时间】:2018-03-29 18:35:54
【问题描述】:
我正在尝试创建一个多项式类。应该对每个对象的术语进行排序以便于使用(从较高的指数到较小的指数)。所以我在addTerm 方法中进行了排序,但我在正确操作时遇到了一些麻烦。我要么创建一个无限链表,要么事情没有正确排序
#include <iostream>
using namespace std;
class Polynomial {
protected:
class Term {
public:
int exponent;
int coefficient;
Term *next;
Term(int exp, int coeff, Term *n) {
exponent = exp;
coefficient = coeff;
next = n;
}
friend class Polynomial;
};
public:
Polynomial() {
root = NULL;
}
Polynomial(const Polynomial &p) {
root = p.root;
}
~Polynomial() {
root = NULL;
}
void addTerm(int expon, int coeff) {
Term *prev = root;
Term *target = root;
if (root == NULL) {
Term tmp = Term(expon, coeff, NULL);
Term *p = &tmp;
root = p;
return;
}
while (target!= NULL && target->exponent < expon) {
prev = target;
target = target->next;
}
if (prev == target){
Term tmp = Term(expon, coeff, target;
Term *p = &tmp;
prev->next = p;
}else{
Term tmp = Term(expon, coeff, target);
Term *p = &tmp;
prev->next = p;
}
}
private:
Term *root;
};
int main() {
Polynomial q;
q.addTerm(1, 4);
q.addTerm(2, 3);
q.addTerm(3, 4);
//q.addTerm(1, 4);
//q.addTerm(2, 4);
// q.addTerm(2,4);
//q.print();
//cout << q;
}
【问题讨论】:
-
分离关注点。多项式类都与列表的实现纠缠在一起。使用列表类型来构建多项式类型。最好使用标准 STL 容器,例如
std::list。如果愚蠢的讲师不允许这样做,请使用标准列表容器测试您的多项式代码以实现它,然后尝试滚动您自己的列表替换。 -
主类和子类方法都应该是原样..
-
如果你的意思是你的教练说你必须这样做,那太可惜了。请记住,他是在告诉你做得不好。买一本好书。
-
我的意思是我们只写每个方法的内部而不是名称和它们的变量......因为它们从分级机传递......另外我的导师在谷歌为 V8 js 引擎工作所以我不能正确解释这一点
-
我不明白你的意思,但没关系。询问您的导师是否可以使用标准列表,如果不能(不太可能给出他的凭据),是否可以编写单独的列表类并将其合并到多项式中。
标签: c++ oop linked-list abstract