gpt4 book ai didi

C++ 如何使对象的拷贝不指向原始对象

转载 作者:行者123 更新时间:2023-12-04 08:01:59 25 4
gpt4 key购买 nike

我正在编写一个程序来实现一个链表。该列表包含用于表示多项式函数中的项的节点。我有一个类(class)叫 Polynomial我在那里实例化链表。该类具有允许您修改多项式的方法,包括 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 时复制后 pq它将这些条款添加到 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 中定义“=”运算符的方式所致。类(class)。在这里,您必须确保它正在创建术语的新拷贝,而不是指向另一个 Polynomial 的内容。目的。
将以下函数设为 public函数在 Polynomial :

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*;

关于C++ 如何使对象的拷贝不指向原始对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66418154/

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