B
BadWolf
Задача: Составить программу, которая вычисляет сумму матриц. Перегрузить операторы "+" и "=".
Если деструктор убрать, то программа нормально работает, но если он присутствует, то на этапе "z = x + y" выдает ошибку. Почему?
C++:
#include<iostream>
#include<time.h>
using namespace std;
class Matrix
{
int n; //strioki
int m; //stolbiki
int **M; //sobstvenno matrix
public:
Matrix();
Matrix(int);
Matrix(int,int);
Matrix(int,int,int);
void CreateMatrix(int,int);
void FillingMatrix();
Matrix operator+ (Matrix &Ob1);
Matrix& operator= (Matrix &Ob1);
void ViewMatrix();
void ClearMatrix();
~Matrix();
};
Matrix::Matrix()
{
n=m=1;
CreateMatrix(n,m);
FillingMatrix();
};
Matrix::Matrix(int _n, int _m)
{
n=_n;
m=_m;
CreateMatrix(n,m);
FillingMatrix();
};
Matrix::Matrix(int _n, int _m, int o)
{
n = _n;
m = _m;
CreateMatrix(n,m);
};
Matrix::Matrix(int x)
{
m=n=1;
CreateMatrix(1,1);
for (int i=0; i<n; i++)
for (int j=0; j<m; j++)
{
if (i==j)
{
M[i][j]=x;
}
else M[i][j] = 0;
};
};
void Matrix::CreateMatrix(int _n, int _m)
{
M = new int* [_n];
for (int i=0; i<_n; i++)
{
M[i] = new int [_m];
};
}
void Matrix::FillingMatrix()
{
for (int i=0; i<n; i++)
for (int j=0; j<m; j++)
{
M[i][j] = rand()%50;
};
};
Matrix Matrix::operator+ (Matrix &Ob1)
{
Matrix temp(Ob1.n,Ob1.m,0);
if (n!=Ob1.n || m!=Ob1.m)
{
printf("Inpossible\n");
system("pause");
return 1;
};
for (int i=0; i<n; i++)
for (int j=0; j<m; j++)
{
temp.M[i][j] = M[i][j] + Ob1.M[i][j];
};
return temp;
};
Matrix &Matrix::operator= (Matrix &Ob1)
{
ClearMatrix();
n = Ob1.n;
m = Ob1.m;
CreateMatrix(n,m);
for (int i=0; i<n; i++)
for (int j=0; j<m; j++)
{
M[i][j]=Ob1.M[i][j];
};
return *this;
};
void Matrix::ViewMatrix()
{
for (int i=0; i<n; i++)
{
for (int j=0; j<m; j++)
{
printf("%4d",M[i][j]);
};
cout<<'\n';
};
cout<<'\n';
};
void Matrix::ClearMatrix()
{
for (int i=0; i<n; i++)
{
delete[] M[i];
};
delete[] M;
m=n=1;
};
Matrix::~Matrix()
{
for (int i=0; i<n; i++)
delete [] M[i];
delete[] M;
};
int main()
{
Matrix x(3,2), y(3,2),z;
srand(time(NULL));
x.ViewMatrix();
y.ViewMatrix();
z = x+y;
z.ViewMatrix();
system("pause");
return 0;
}
Если деструктор убрать, то программа нормально работает, но если он присутствует, то на этапе "z = x + y" выдает ошибку. Почему?