Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;如何使对象的副本不指向原始对象_C++_Object - Fatal编程技术网

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=
之前添加
多项式::
。希望这有帮助!那是我的错,我忘了把它放在我的头文件里。我似乎很难在函数中遍历链表(我对链表非常陌生)。我将在我的原始帖子中添加我的迭代尝试。它似乎不起作用。你能帮我什么忙吗?