第二次:对于多项式类增加下列功能:
- 重载“+”运算符,实现两个多项式相加。
- 重载“-”运算符,实现两个多项式相减。
- 重载“*”运算符,实现两个多项式相乘。
- 重载“=”运算符,实现两个多项式的赋值运算。
- 在main函数中增加相应测试代码。
考虑:把其中某个运算符重载为友元函数。
第一次请参看:blog.sagiri-web.com/wordpress/2019/06/09/%E5%A4%9A%E9%A1%B9%E5%BC%8F%E5%AD%98%E5%82%A8-1/
//Polynomial-类定义头文件
#ifndef _POLYNOMIAL_H
#define _POLYNOMIAL_H
#include <iostream>
using namespace std;
class Polynomial{
public:
Polynomial(Polynomial &A);
Polynomial(int count);
Polynomial();
void output();
float get_answer();
void get_NoOfPolynomial();
~Polynomial();
friend Polynomial operator + (Polynomial & A,Polynomial & B);
friend Polynomial operator - (Polynomial & A,Polynomial & B);
friend Polynomial operator * (Polynomial & A,Polynomial & B);
Polynomial& operator = (const Polynomial & B);
// private:
int n;
float x;
float *a;
static int NoOfPolynomial;
};
#endif
//Polynomial.cpp-类函数定义
#include "Polynomial.h"
int Polynomial::NoOfPolynomial=0;
Polynomial::Polynomial(Polynomial &A){
n=A.n;
a=new float[A.n+1];
for(int i=0;i<=n;i++)
{
a[i]=A.a[i];
}
NoOfPolynomial++;
}
Polynomial::Polynomial(int count){
n=count;
a=new float[n+1];
NoOfPolynomial++;
}
Polynomial::~Polynomial(){
delete[] a;
NoOfPolynomial--;
}
Polynomial::Polynomial(){
cout<<"please input n:";
cin>>n;
a=new float[n+1];
for(int i=0;i<=n;i++)
{
cout<<"please input a"<<i<<':';
cin>>a[i];
}
NoOfPolynomial++;
}
void Polynomial::output(){
cout<<"Polynomial=";
for(int i=n;i>=0;i--)
{
if(i!=n)
if(a[i]>0)
cout<<'+';
if(a[i]==1)
{
cout<<"X^"<<i;
}
else if(a[i]!=0)
{
cout<<a[i]<<"X^"<<i;
}
}
cout<<endl;
}
float Polynomial::get_answer(){
float data=1;
float answer=a[0];
cout<<"please input x:";
cin>>x;
for(int i=1;i<=n;i++)
{
for(int j=i;j>0;j--)
{
data*=x;
}
answer+=data*a[i];
data=1;
}
cout<<answer<<endl;
return answer;
}
void Polynomial::get_NoOfPolynomial(){
cout<<NoOfPolynomial<<endl;
}
Polynomial operator +(Polynomial & A,Polynomial & B){
int i=0;
if(A.n>=B.n)
{
Polynomial sum(A);
for(i=0;i<=B.n;i++)
{
sum.a[i]=A.a[i]+B.a[i];
}
for(i+=1;i<=A.n;i++)
{
sum.a[i]=A.a[i];
}
return sum;
}
else
{
Polynomial sum(B);
for(i=0;i<=A.n;i++)
{
sum.a[i]=A.a[i]+B.a[i];
}
for(i+=1;i<=B.n;i++)
{
sum.a[i]=B.a[i];
}
return sum;
}
}
Polynomial operator -(Polynomial & A,Polynomial & B){
int i=0;
if(A.n>=B.n)
{
Polynomial diffrence(A);
for(i=0;i<=B.n;i++)
{
diffrence.a[i]=A.a[i]-B.a[i];
}
for(i+=1;i<=A.n;i++)
{
diffrence.a[i]=A.a[i];
}
return diffrence;
}
else
{
Polynomial diffrence(B);
for(i=0;i<=A.n;i++)
{
diffrence.a[i]=A.a[i]-B.a[i];
}
for(i+=1;i<=B.n;i++)
{
diffrence.a[i]=-B.a[i];
}
return diffrence;
}
}
Polynomial operator *(Polynomial & A,Polynomial & B){
// if(A.n==0&&B.n==00)
// {
// Polynomial diffrence(1);
// diffrence.a[0]=A.n*B.n;
// return diffrence;
// }
Polynomial diffrence(A.n+B.n+1);
cout<<A.n+B.n+1<<endl;
for(int i=0;i<=A.n+B.n;i++)
diffrence.a[i]=0;
for(int i=0;i<=A.n;i++)
{
for(int j=0;j<=B.n;j++)
{
diffrence.a[i+j]+=A.a[i]*B.a[j];
// cout<<"a[0]="<<diffrence.a[0]<<endl;
// cout<<"a[1]="<<diffrence.a[1]<<endl;
// cout<<"a[2]="<<diffresnce.a[2]<<endl;
// cout<<"a[3]="<<diffrence.a[3]<<endl;
// cout<<"------------------------------\n";
}
}
return diffrence;
}
Polynomial& operator =(const Polynomial & B){
if(this.n>=B.n)
{
for(int i=0;i<=B.n;i++)
{
this.a[i]=B.b[i];
}
for(int i=B.n+1;i<=this.n;i++)
{
this.a[i]=0;
}
return;
}
else
{
delete[] this.a;
this.a=new float[B.n+1];
for(int i=0;i<=B.n;i++)
{
this.a[i]=B.b[i];
}
return;
}
}
//main.cpp-主函数(测试)
#include <iostream>
#include "Polynomial.h"
int main(){
int num;
Polynomial A;
A.output();
// A.get_answer();
Polynomial B;
B.output();
// B.get_answer();
//Polynomial sum(A+B);
(A*B).output();
(A*B).get_answer();
// Polynomial *p;
// cout<<"please input how many Polynomial you want to save:";
// cin>>num;
// p=new Polynomial[num];
}