
c++利用运算符重载 定义多项式加法 返回值出错
classPoly{intn;public:int*a;Poly(){}Poly(int){cout<<"请输入多项式的次数:";cin>>n;a=newint[n+1]...
class Poly{int n;
public:int *a;Poly(){}Poly(int){cout<<"请输入多项式的次数:";cin>>n;a =new int [n+1];cout<<"请依次输入各项系数 不存在该次项则输入0 最高项系数不得为0"< for(int i=0;i {cout cin>>a[i];}}Poly(const Poly &C){a=C.a;}~Poly(){delete []a;}void output(){cout<<"多项式如下:"< //if(a[0]!=0)cout for(int i=1;i if(a[i]!=0)cout cout }Poly operator +(Poly &add){Poly result;result.n=(n>add.n?n:add.n);int mi=n result.a=new int[n+1];for(int i=0;i result.a[i]=a[i]+add.a[i];if(n>add.n)for(int i=mi+1;i<=result.n;i++)result.a[i]=a[i];elsefor(int i=mi+1;i<=result.n;i++)result.a[i]=add.a[i];cout<<"a0:"<<result.a[0]<<endl;result.output();return result;}};int main(){Poly r(1);r.output();Poly s(1);s.output();Poly t;t=r+s;cout<<"t.a0:"<<t.a[0];t.output();return 0;} 展开
public:int *a;Poly(){}Poly(int){cout<<"请输入多项式的次数:";cin>>n;a =new int [n+1];cout<<"请依次输入各项系数 不存在该次项则输入0 最高项系数不得为0"< for(int i=0;i {cout cin>>a[i];}}Poly(const Poly &C){a=C.a;}~Poly(){delete []a;}void output(){cout<<"多项式如下:"< //if(a[0]!=0)cout for(int i=1;i if(a[i]!=0)cout cout }Poly operator +(Poly &add){Poly result;result.n=(n>add.n?n:add.n);int mi=n result.a=new int[n+1];for(int i=0;i result.a[i]=a[i]+add.a[i];if(n>add.n)for(int i=mi+1;i<=result.n;i++)result.a[i]=a[i];elsefor(int i=mi+1;i<=result.n;i++)result.a[i]=add.a[i];cout<<"a0:"<<result.a[0]<<endl;result.output();return result;}};int main(){Poly r(1);r.output();Poly s(1);s.output();Poly t;t=r+s;cout<<"t.a0:"<<t.a[0];t.output();return 0;} 展开
1个回答
展开全部
a是new出来的,在赋值的时候不能浅拷贝,要深拷贝。
追问
那该怎么写
追答
Poly(const Poly &C)
{
a=C.a; // 这里需要重新为a分配内存,不能与C.a共用内存
改为:
n = C.n
a = new int[n+1];
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询