Требуется реализовать класс для работы с матрицами и их подматрицами. Для храения матрицы размера N на M используется линейное представление — массив из N*M элементов. Необходимый набор операций: создание матрицы заданного размера, получение размеров матрицы, получение и изменение элемента по заданным индексам, поэлементное сложение (для матриц однакового размера), печать, копирование, удаление с освобождением памяти, взятие подматрицы.
Подматрицы реализуются отдельным классом, который не выделяет память для хранения матрицы. В этом классе хранится указатель на "основную" матрицу.
В случае обнаружения ошибочных данных методы должны генерировать исключения.
Требования.