C++ C++;如何使对象的副本不指向原始对象
我正在写一个程序来实现一个链表。该列表包含用于表示多项式函数中的项的节点。我有一个名为C++ C++;如何使对象的副本不指向原始对象,c++,object,C++,Object,我正在写一个程序来实现一个链表。该列表包含用于表示多项式函数中的项的节点。我有一个名为polymonent的类,我在其中实例化了链表。该类具有允许您修改多项式的方法,包括addTerm方法 大体上,我想这样做: Polynomial p, q; p.addTerm({ 4, 8 }); p.addTerm({ -3, 2 }); q = p; p.addTerm({ 5, 6 }); p.addTerm({ 3, 2 }); 这是完整的多项式类: class Polynomial {
polymonent
的类,我在其中实例化了链表。该类具有允许您修改多项式的方法,包括addTerm方法
大体上,我想这样做:
Polynomial p, q;
p.addTerm({ 4, 8 });
p.addTerm({ -3, 2 });
q = p;
p.addTerm({ 5, 6 });
p.addTerm({ 3, 2 });
这是完整的多项式类:
class Polynomial {
Node* Head;
public:
Polynomial();
~Polynomial();
void addTerm(Term term);
unsigned int degree() const;
double coefficientFor(unsigned int exponent) const;
void clear();
private:
void DeleteInvalidNode();
};
而建筑者:
Polynomial::Polynomial()
{
Head = 0;
}
然而,出于某种原因,当我将p
复制到q
之后,将这些术语添加到p
时,它会将这些术语添加到q
。据我所知,这是因为当你将一个对象复制到另一个对象时,它们指向同一个对象。当我修改p
时,是否有任何方法可以将其修复到不影响q
编辑:我现在创建了一个操作员复制分配函数,用于尝试复制链接列表
我写了以下内容:
Polynomial& Polynomial::operator=(const Polynomial& rhs)
{
Node* Temp = rhs.Head;
while (rhs.Head != NULL)
{
Temp = rhs.Head->next;
this->addTerm({ rhs.coefficientFor(degree()), rhs.degree() });
rhs.Head = Temp;
}
return *this;
}
但它不起作用,因为rhs是常量,我正在尝试修改它。我对链表很陌生。如何将其修复到可以工作的位置?这可能是由于您如何在
多项式
类中定义“=”运算符。在这里,您必须确保它正在创建术语的新副本,而不是指向另一个多项式
对象的内容
将以下函数设置为多项式中的公共
函数:
Polynomial& operator=(const Polynomial& rhs){
/*Not sure the specifics of your functions or the intention of Nodes, so
if you need to iterate throuch each term in a Polynomial, be sure to do so,
and put the statement below within your loop.*/
this->addTerm({rhs->coefficientFor(rhs->degree()),rhs->degree()});
/*or something to that effect, what matters is being able to retrieve the
each Term in the rhs (right-hand-side) and adding them to this
Polynomial.*/
return this*;
你可能想做一个测试。也许你没有正确地执行测试。如果你想做更深入的诊断,请出示a。我该怎么做?我编辑了我的问题并添加了类和contructor@ParkerHarrelson123我把密码放在我的答案里了!将其作为一个强有力的指南,并根据您的具体需要进行编辑!当我把这个代码片段放进去时,它给了我一个错误,告诉我“operator”必须是一个成员函数。然后“this”只能在非静态成员函数中使用。我很确定,您所需要做的就是在函数头中的opeartor=
之前添加多项式::
。希望这有帮助!那是我的错,我忘了把它放在我的头文件里。我似乎很难在函数中遍历链表(我对链表非常陌生)。我将在我的原始帖子中添加我的迭代尝试。它似乎不起作用。你能帮我什么忙吗?