C++ и Python

Суммирование матриц (6)

Суммирование матриц

Условие

В этой задаче вам необходимо разработать класс Matrix для представления вещественной матрицы. Класс Matrix должен иметь:

  • конструктор по умолчанию, который создает матрицу с нулем строк и нулем столбцов
  • конструктор от двух целочисленных параметров: num_rows и num_cols, - которые задают количество строк и столбцов матрицы соответственно
  • метод Reset, принимающий два целочисленных параметра, которые задают количество строк и столбцов матрицы соответственно
  • константный метод At, который принимает номер строки и номер столбца (именно в этом порядке: нумерация строк и столбцов начинается с нуля) и возвращает значение в соответствующей ячейке матрицы
  • неконстантный метод At с такими же параметрами, но возвращающий ссылку на значение в соответствующей ячейке матрицы
  • константные методы GetNumRows и GetNumColumns, которые возвращают количество строк и столбцов матрицы соответственно

Метод At должен выбрасывать стандартное исключение out_of_range со следующим текстом: "ERROR: Out of range!", если переданные ему индексы выходят за границы матрицы.

Кроме того для класса Matrix должны быть определены следующие операторы:

  • оператор ввода из потока istream; формат ввода простой - сначала задается количество строк и столбцов (именно в этом порядке), а затем все элементы матрицы: сначала элемент первой строки и первого столбца, затем элемент первой строки и второго столбца и так далее
  • оператор вывода в поток ostream; он должен выводить матрицу в том же формате, в какой ее читает оператор ввода, - в первой строке количество строк и столбцов, во второй - элементы первой строки, в третей - элементы второй строки и т.д.
  • оператор проверки на равенство (==): он должен возвращать true, если сравниваемые матрицы имеют одинаковый размер и все из соответствующие элементы равны между собой, в противном случае он должен возвращать false
  • оператор сложения: он должен принимать две матрицы и возвращать новую матрицу, которая является их суммой; если переданные матрицы имеют разные размеры этот оператор должен выбрасывать стандартное исключение invalid_argument со следующим текстом: "ERROR: Incorrect matrix sizes!"

Как тестировать локально

Собрать программу с помощью cmake и запустить ctest:

mkdir build; cd build
cmake ..; cmake --build .
ctest -V