如何更正此程序中的重载分配?

时间:2014-04-12 17:41:45

标签: c++ pointers

大家好:我正在努力将一个类对象的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];}
 }

1 个答案:

答案 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())容易引起混淆。