Visual Studio .
Необходимо реализовать класс Matrix – целочисленную прямоугольную матрицу со следующими методами:
- Конструктором, получающим в качестве параметров количество строк и столбцов в матрице. В результате должна быть создана нулевая матрица.
- Конструктором копирования.
- Конструктором перемещения.
- Деструктором.
- Перегруженным оператором присваивания с копированием operator =.
- Перегруженным оператором присваивания с перемещением operator =.
- Перегруженным оператором сравнения двух матриц operator == (реализовать в виде метода класса).
- Перегруженным оператором суммирования двух матриц operator + (реализовать в виде дружественной функции). Исходные операнды изменяться не должны.
- Перегруженным оператором перемножения двух матриц operator * (реализовать в виде метода класса). Исходные операнды изменяться не должны.
- Перегруженным оператором индексирования operator [ ], который возвращает указатель на заданную строку матрицы.
- Перегруженным оператором индексирования operator ( ) с двумя параметрами (индексами элемента матрицы), который контролирует корректность значений индексов и генерирует исключение (throw std::runtime_error(“Invalid index”);) в случае выхода любого индекса за границы матрицы. Оператор должен возвращать l-value. Для использования исключений #include .
- Перегруженным оператором вставки матрицы в поток вывода operator <<.
- Перегруженным оператором извлечения элементов матрицы из потока ввода operator >>.
- Методом заполнения матрицы данными из текстового файла.
- Методом, возвращающим транспонированную матрицу. Исходная матрица изменяться не должна.
Для хранения элементов матрицы следует использовать динамически созданный двумерный массив элементов типа int (private-поля в классе – указатель на двумерный динамический массив и две размерности).
Необходимо реализовать тесты для созданного класса.