大家好:我正在努力将一个类对象的cof分配给另一个类对象。但是,为什么我的重载(=)只能分配前两个cofs!(cof是指向int的指针)
我是新来的,我不知道如何在这里输入mu代码。我希望有一个人可以帮助我!谢谢! 这是我的代码:
#include <iostream>
using namespace std;
class polynomial
{ private :
int* cof;
int size;
public :
polynomial();
polynomial(int );
polynomial(const polynomial& a);
~polynomial();
int getvalue() const;
void operator =(const polynomial& a);
void output(const polynomial& p);
};
int main()
{ int m;
cout<<"how many numbers in p1 :"<<endl;
cin>>m;
polynomial p1(m);
cout<<"how many numbers in p2"<<endl;
cin>>m;
polynomial p2(m);
cout<<"the p1's cof"<<endl;
p1.output(p1);
cout<<"the p2's cof"<<endl;
p2.output(p2);
polynomial t;
t=p1;
cout<<" the t's cof:"<<endl;
t.output(t);
t=p2;
cout<<"the t's cof:"<<endl;
t.output(t);
return 0;
}
polynomial::~polynomial()
{ delete [] cof;}
polynomial:: polynomial():size(1)
{ cof= new int[size];
cof[0]=0;
}
polynomial::polynomial(int a): size(a)
{ cof= new int[size+1];
cout<<"please enter the numbers:"<<endl;
for(int i=0;i<size+1;i++)
cin>>cof[i];
}
polynomial::polynomial(const polynomial& a)
{ cof= new int[a.size+1];
for(int i=0;i<=a.size;i++)
{ cof[i]=a.cof[i];}
}
int polynomial::getvalue() const
{ return size;}
void polynomial::output(const polynomial& p)
{ for(int i=0;i<=p.size;i++)
{ cout<<p.cof[i]<<" ";}
cout<<endl;
}
void polynomial::operator =(const polynomial& a)
{ if (cof!=NULL)
delete [] cof;
int x=a.getvalue();
cof= new int[x+1];
for(int i=0;i<=x;i++)
{ cof[i]=a.cof[i];}
}
答案 0 :(得分:1)
你只是忘了复制尺寸。
void polynomial::operator =(const polynomial& a) {
if (cof!=NULL) delete [] cof;
size = a.getvalue(); // <<< !!!
cof = new int[size+1];
for(int i = 0; i < size + 1; i++){
cof[i]=a.cof[i];}
}
}
如果删除过时的C风格数组并使用std :: vector,编码会更容易。您可以删除大小(使用向量的大小)并只复制向量。
此外,调用与成员(大小)不同的getter(getvalue())容易引起混淆。