Матрица классов в с ++ - PullRequest
0 голосов
/ 30 апреля 2020

Когда я ввел 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;
}

1 Ответ

0 голосов
/ 30 апреля 2020

В этом коде, как вы думаете, сколько строк и столбцов имеет tg?

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::operator + (const Matrix &a)
{
    Matrix tg(a.row, a.col); // make tg same size as a
    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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...