#include "stdafx.h"
#include <iostream>
#include<list>
#include<assert.h>
using namespace std;
class Term{ //代表多項式中的每一項
friend ostream& operator<<(ostream&, Term&);
friend istream& operator>>(istream&, Term&);
friend class Polynominal;
public:
Term(int c,int e) : coef(c), exp(e){}
Term& operator+(Term&);
private:
int coef;
int exp;
};
ostream& operator<<(ostream& out, Term& t){//輸出單項
if(t.coef==0) return out;
else if(t.coef>0) out<<"+";
out<<t.coef<<"x^"<<t.exp;
return out;
}
istream& operator>>(istream& in, Term& t){//輸入單項,包括指數(shù)和系數(shù)
cout<<"Input coef & exp: "<<endl;
in>>t.coef>>t.exp;
return in;
}
Term& Term::operator +(Term& t){//項與項的加法
assert(exp==t.exp);
Term* term=term=new Term(coef+t.coef, exp);
return *term;
}
/********************************************************************
********************************************************************/
class Polynominal{//多項式,用一個鏈表存儲
friend istream& operator>>(istream&, Polynominal&);
friend ostream& operator<<(ostream&, Polynominal&);
public:
Polynominal& operator+(Polynominal&);
private:
list<Term> pList;
};
istream& operator>>(istream& in, Polynominal& poly){//輸入Polynominal
int n=0;
cout<<"Input NUM of Term: "<<endl;
cin>>n;
cout<<"Input Every Term of The Polynominal: "<<endl;
Term t(0,0);
for(int i=0;i<n;i++){
cin>>t;
poly.pList.push_back(t);
}
return in;
}
template <class T>
ostream& operator<<(ostream& out, list<T>& myList){//重載實現(xiàn)對list的輸出
list<T>::iterator iter;
for(iter=myList.begin();iter!=myList.end();iter++)
cout<<*iter<<" ";
cout<<endl;
return out;
}
ostream& operator<<(ostream& out, Polynominal& poly){//輸出Polynominal
out<<poly.pList;
return out;
}