在类成员中重载+ =运算符

时间:2012-12-01 07:35:41

标签: c++ operators overloading nodes

我正在尝试在程序中重载+ =运算符。它由一个多项式类组成,该类包括一个int度(多项式的最高次数)和一个Node * Poly(一个指向节点的指针)

struct Node{ int coefficient;
             Node* next; };

这是我的Node结构,但我在Polynomial类中重载了。

  Polynomial& Polynomial::operator +=(const Polynomial& rP){
    Polynomial copyRP(rP);
    poly->coefficient = poly->coefficient + copyRP.poly->coefficient;
    poly = poly->next; //if I take this and
    copyRP.poly = copyRP.poly->next; //this away, it runs fine
    //with it however the program compiles but doesnt work 
    return *this;
  }

如果重要,节点会向后包含系数列表。例如,3x ^ 2 + 2x + 5作为5-> 2-> 3存储在节点中,并且具有2度。

1 个答案:

答案 0 :(得分:0)

试试这个:

struct polynomial {
    std::vector< int > coeffs;
    std::size_t degree() const { return coeffs.size(); }
};

polynomial &polynomial::operator+= ( polynomial &lhs, polynomial const &rhs ) {
    if ( lhs.degree() < rhs.degree() ) lhs.coeffs.resize( rhs.degree() );
    for ( std::size_t k = 0; k != rhs.degree(); ++ k ) {
        lhs.coeffs[ k ] += rhs.coeffs[ k ];
    }
    return lhs;
}

没有链接列表,没有手动内存管理,您可以轻松地将其更改为其他数字类型。