0

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

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

那是我的节点结构,虽然我在多项式类中重载。

  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。

4

1 回答 1

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

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

于 2012-12-01T07:53:10.820 回答