Когда я ввел 2 матрицы, программа остановилась. Сумма не печатается, даже слова «сумма двух матриц» тоже не печатаются. Я не знаю, все ли это из-за ошибок распределения, потому что когда я использую массивы или вектор stati c, результат будет правильным. Я не знаю, как это исправить. Надеюсь, что все помогают, пожалуйста! Большое спасибо!
#include <iostream>
using namespace std;
class Matrix
{
private:
int** value;
int row;
int col;
public:
Matrix();
Matrix(int, int);
Matrix(const Matrix&);
Matrix operator + (const Matrix&);
friend istream& operator >> (istream&, Matrix&);
friend ostream& operator << (ostream&, Matrix&);
~Matrix(void);
};
int main(void)
{
Matrix a, b, c;
cout << "Input 1st matrix: ";
cin >> a;
cout << a;
cout << "Input 2nd matrix: ";
cin >> b;
cout << b;
c = a + b;
cout << "Sum of 2 matrices: " << c << endl;
return 0;
}
Matrix::Matrix()
{
this->row = 0;
this->col = 0;
value = new int *[row];
for(int i = 0; i < row; i++)
{
value[i] = new int[col];
}
for(int i = 0; i < row; i++)
{
for(int j = 0; j < col; j++)
{
value[i][j] = 0;
}
}
}
Matrix::Matrix(int b, int c)
{
this->row = b;
this->col = c;
value = new int *[row];
for (int i = 0; i < this->row; i++)
{
value[i] = new int[col];
}
}
Matrix::Matrix(const Matrix &a)
{
this->row = a.row;
this->col = a.col;
value = new int *[row];
for (int i = 0; i < row; i++)
{
value[i] = new int[col];
}
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
value[i][j] = a.value[i][j];
}
}
}
istream& operator >> (istream& ip, Matrix& a)
{
cout << endl;
cout << "Input rows: ";
ip >> a.row;
cout << "Input cols: ";
ip >> a.col;
a.value = new int* [a.row];
for (int i = 0; i < a.row; i++)
{
a.value[i] = new int[a.col];
}
for (int i = 0; i < a.row; i++)
{
for (int j = 0; j < a.col; j++)
{
cout << "[" << i << "]" << "[" << j << "]" << " : ";
ip >> a.value[i][j];
}
}
return ip;
}
ostream& operator << (ostream& op, Matrix& a)
{
for (int i = 0; i < a.row; i++)
{
for (int j = 0; j < a.col; j++)
{
op << a.value[i][j] << " ";
}
op << endl;
}
return op;
}
Matrix Matrix::operator + (const Matrix &a)
{
Matrix tg;
for (int i = 0; i < a.row; i++)
{
for (int j = 0; j < a.col; j++)
{
tg.value[i][j] = this->value[i][j] + a.value[i][j];
}
}
return tg;
}
Matrix::~Matrix(void)
{
for (int i = 0; i < this->row; i++)
{
delete[] value[i];
}
delete[] value;
}