недавно я работал над классом матрицы, все шло нормально, пока я не попытался реализовать оператор +
. Я просто не могу понять, почему это не работает. Я посмотрел на многих страницах GitHub, чтобы увидеть, как другие люди реализовали это, но все еще не могли найти никаких проблем в моем коде.
Мой класс выглядит так:
template<class type = int>
class matrix{
private:
int WIDTH, HEIGHT;
int ROWS, COLS;
type* array;
}
Конструктор:
template<class type>
matrix<type>::matrix() : WIDTH(0), HEIGHT(0), ROWS(0), COLS(0), array(nullptr) {}
Конструктор копирования:
template<class type>
matrix<type>::matrix(const matrix& matrixObj) : WIDTH(matrixObj.WIDTH), COLS(matrixObj.WIDTH), HEIGHT(matrixObj.HEIGHT), ROWS(matrixObj.HEIGHT), array(matrixObj.array){}
Деструктор:
template<class type>
matrix<type>::~matrix(){
WIDTH = COLS = 0;
HEIGHT = ROWS = 0;
delete[] array;
}
=
оператор
template<class type>
matrix<type>& matrix<type>::operator=(matrix matObj) noexcept {
swap(*this, matObj);
return *this;
}
+=
оператор
template<class type>
matrix<type>& matrix<type>::operator+=(const matrix& matObj) {
if (matObj.WIDTH != this->WIDTH || matObj.HEIGHT != this->HEIGHT)
throw std::runtime_error("Both matrices must have same dimensions!");
for (int i = 0; i < WIDTH * HEIGHT; i++)
array[i] += matObj.array[i];
return *this;
}
+
оператор
template<typename type>
matrix<type> operator+(matrix<type> lhs, matrix<type>& rhs){
return lhs += rhs;
}
Когда я пытаюсь запустить код ниже:
matrix<int> mat1(2, 3), mat3(2, 5), mat2;
mat2 = mat1 + mat3;
Возвращает случайное значение мусора для mat1
и mat2
.
Как это исправить?
РЕДАКТИРОВАТЬ
Я реализовал перегруженный конструктор, который выглядит следующим образом:
template<class type>
matrix<type>::matrix(int size, type values = 0) : WIDTH(size), HEIGHT(size), ROWS(size), COLS(size) {
int iter = size * size;
delete[] array;
this->array = new type[iter];
while (iter--)
array[iter] = values;
}