Доброго времени суток! Нужно перегрузить оператор + для сложение двух двумерных массивов. Пыталась перегрузить так, но это вызывает исключение
friend Matrix operator +(const Matrix &right, const Matrix &left)
{
Matrix result (right.n,right.m);
for (int i = 0; i < right.n; i++)
{
for (int j = 0; j < right.m; j++)
{
result.mas[i][j] += right.mas[i][j]+ left.mas[i][j];
}
}
return result;
}
Как исправить?
Обновление
Пока что плохо разбираюсь с конструкторами, но вот, что вышло.
Matrix()
{
n = n;
m =m;
mas = new int*[n];
for (int i = 0; i < n; i++)
{
mas[i] = new int[m];
}
}
Это конструктор по умолчанию, я надеюсь.
И вот еще
Matrix (int n, int m) : n(n), m(m)
{
mas = new int*[n];
for (int i = 0; i < n; i++)
{
mas[i] = new int[m];
}
}
По-хорошему, в конструкторе нужно инициализировать массив. Вы выделили память, теперь там - в массиве - совершенно случайные значения... Это - для конструктора Matrix (int n, int m)
. В конструкторе Matrix()
всё вообще весело - какие значения вы присваиваете n
и m
? Да те же случайные, что в них и были.
Даже если исправить конструктор, то при сложении вы не инициализированные значения массива не заменяете, а прибавляете к ним сумму элементов, так что там все равно будет мусор...
Ну и обязательно нужно проверять равенство размеров суммируемых массивов! Если не генерацией исключения - то хотя бы assert
...
Итак, выбросьте конструктор по умолчанию, сделайте один вот такой:
Matrix(int n = 1, int m = 1, int value = 0): n(n), m(m)
{
mas = new int*[n];
for (int i = 0; i < n; i++)
{
mas[i] = new int[m];
for(int j = 0; j < m; ++j) mas[i][j] = value;
}
}
B будет он у вас и швец, и жнец (и обычный конструктор, и по умолчанию - создавать массив 1x1
), и даже на дуде игрец - заполнять массив значениями по умолчанию...
Ну, а в операторе +
напишите не
result.mas[i][j] += right.mas[i][j]+ left.mas[i][j];
а
result.mas[i][j] = right.mas[i][j]+ left.mas[i][j];
и добавьте проверку хотя бы assert(left.n == right.n && left.m == right.m);
или
if (left.n != right.n || left.m != right.m)
throw std::exception("Matrix sizes not matched in operator+()");
Ну, и не забудьте, как вам уже писали, копирующий конструктор. Да и оператор присваивания не помешает. О них уже рассказано здесь: Правильно ли заданы конструктор копирования и оператор присваивания? Как улучшить?
Подскажите библиотеку на C++ в которой реализован метод интерполяции с регулярной сетки на сетку ВороногоКак я понял нужно искать все пересечения...
Как написать программу, которая бы могла на странице входа пользователя в систему выдать какую-нибудь экранную формуТипа Hello World
Хочу делат апдейт на таблице видает такую ошибку
Работаю на денвере через CMD (Денвер потому что весит мало), есть несколько вопросов по Mysql