2014-04-12 26 views
0

大家好:我正在努力將一個類對象的cof分配給另一個類對象。然而,爲什麼我的超載(=)只能分配前兩個cofs!(cof是指向int的指針)如何更正此程序中的重載分配?

我是新來的,我不知道如何在這裏輸入畝代碼。我希望有一個人可以幫助我!謝謝! 這是我的代碼:

#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

將粘貼代碼粘貼到編輯窗口中,將其全部選中並點擊Control-K。 – Casey

回答

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