2012-12-01 3 views
0

내 프로그램에서 + = 연산자를 오버로드하려고합니다. * 폴리 (A 노드에 대한 포인터) 내 노드 구조체입니다노드 멤버의 클래스에서 + = 연산자 오버로드

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

, 나는 다항식에 그것은 int로 학위 (다항식의 최고 수준)와 노드를 포함하는 다항식 클래스로 구성되어 과부하입니다 클래스. 그 중요한 경우

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

노드는 이전 버전과 계수의 목록이 포함되어 있습니다. 예를 들어 3 배는^2 + 2 배 + 5 5> 2-> 3과 노드에 저장되고, 2

+1

그리고 다항식 클래스의 정의는 무엇입니까? 어떻게 작동하지 않습니까? 왜 제대로 작동하지 않는다고 말하는 줄이 필요한가요? 왜'operator + ='는 아무것도 복사하지 않습니까? – Potatoswatter

+0

'rP.poly = rP.poly-> next'는 lvalue가 수정 될 수 없다고 말할 것이기 때문에 copy를 만들었고'poly = poly-> next'와'copyRP.poly = copyRP '를 유지하면 제대로 동작하지 않습니다. poly-> next' 그리고'while (poly! = NULL) '을 넣어서 전체 노드에 추가하는 것을 잊어 버렸습니다.하지만 내 프로그램에 넣었습니다. –

+0

두 개의 다항식을 가진다면 ^^ + 2x + 2와 2x^2 + 3x + 4, 5x^2 + 5x + 6을 반환하고 싶습니다. 두 개의 다항식을 더합니다. 그러나 'return * this'을 시도 할 때마다 나는'this'의 사본을 만든다, 그것은 사본을 돌려 보낼 수있게 해준다, 나는 그것을 얻지 않는다 !!! –

답변

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

어떠한 연결리스트를 더 수동 메모리 관리를 사용하면 쉽게 다른 숫자 유형으로 변경할 수 있습니다.

+0

내가 할 수 있으면 좋겠다. 나는 C++ 클래스를 사용하고 있는데, 이것은 hw의 일부이며 hw의 요점은 내가했던 것과 같은 노드를 갖는 것입니다. 나는 변경할 수 없습니다 = ( –

+0

@ user1828659 아, 표준 라이브러리를 사용할 수있을 때 링크 된 목록을 작성하는 것은 ** 매우 나쁜 생각입니다 ** 관찰 한 바와 같이 불안정한 프로그램이 생깁니다. 그런 프로젝트를 갖는 것은 클래스가 불량하고 쓸모없는 충고. – Potatoswatter

+0

나는 무엇을 해야할지 알았다! 나는 단지'Node * p = poly'와'Node * r = rP.poly'를해야만했고, 거기에서 도움이된다. 어쨌든 도움을 주셔서 감사합니다! –