PDA

نسخه کامل مشاهده نسخه کامل : چرا این اپراتور تخصیص درست کار نمیکنه



طاهره89
23-12-2012, 08:50
سلام. دارم یه کلاس ماتریس می نویسم ولی اپراتور تخصیص درست کار نمی کنه و این باعث شده بقیه اپراتورها هم به مشکل بخوره. کسی میدونه اشکال کارم کجاست؟

#include <iostream>
using namespace std;
class Matrix{
public:
int m,n;
int *data;
Matrix(int h=1,int w=1){data=new int[(m=h)*(n=w)];}
~Matrix(){delete[]data;}
void print();
int &operator[](int i);
int &operator()(int r,int c);
void operator=(Matrix);
};
////////////////////////////////////////
int &Matrix::operator ()(int r, int c)
{
return data[r*n+c];
}
////////////////////////////////////////
int &Matrix::operator[](int i)
{
return data[i];
}
///////////////////////////////////////
void Matrix::operator=(Matrix A)
{

for(int i=0;i<m*n;i++)
{
(*this)[i]=A[i];
/*cout<<(this)->data[i]<<" "<<A[i]<<endl;*/
//ba ejraye dastoor bala be nazar mirese takhsis dorost anjam gerafte!

}

}
///////////////////////////////////////
void Matrix::print()
{
int i,j;
for(i=0;i<m;i++,cout<<endl)
for(j=0;j<n;j++)
cout<<(*this)(i,j)<<" ";
}
////////////////////////////////////////
int main()
{
int i,m,s,t;
Matrix B(3,3),C(3,3),D(3,3);

for(i=0;i<9;i++)
C[i]=5;
cout<<endl<<"C="<<endl;
C.print();
for(i=0;i<9;i++)
B[i]=i;
cout<<endl<<"B="<<endl;
B.print();

B=C;
cout<<endl<<"pas az takhsis!"<<endl<<"B="<<endl;
B.print();
cout<<endl<<"C="<<endl;
C.print();


system ("pause");
return 0;
}

طاهره89
28-12-2012, 17:01
سلام.
خودم جوابش رو پیدا کردم گفتم اینجا هم جوابو بذارم شاید به درد بخوره
سازنده کپی تعریف نشده
برای رفع این مشکل می تونیم توی تعریف اپراتور تخصیص و همچنین موقع نوشتن بدنه، به جای Matrix A بنویسیم Matrix &A