Change History (7)

comment:1 Changed 4 years ago by Egor Suvorov

Owner: changed from Артур Гулецкий (huletski) to podoprigora.ivan
Type: ожидается проверкаожидаются исправления

comment:2 Changed 4 years ago by podoprigora.ivan

Owner: changed from podoprigora.ivan to Артур Гулецкий (huletski)
Type: ожидаются исправленияожидается проверка

comment:3 Changed 4 years ago by Артур Гулецкий (huletski)

Type: ожидается проверкаожидаются исправления

Общие замечания:

  • реализуйте хранение элементов Matrix в динамической памяти (сырые указатели), а не в векторах, чтобы потренироваться в обеспечении базовой гарантии исключений;
  • программа падает, если попытаться загрузить файл большого формата, перемножить матрицы большого размера;
  • объект MatrixException? нужно бросать в качестве исключения, а не использовать как конвертер словленного инта в сообщение об ошибке (main.cpp:53);

Замечания:

  • MatrixException::what: не хвататет override в объявлении;
  • Matrix::load: неясно почему принимает std::fstream, а не std::istream;
  • методы Matrix лучше реализовать через перегрузку операторов, если это возможно;
  • matrix.cpp:19. списки инициализации;
  • matrix.cpp:25. избыточность: деструктор вектора очистит всю память, выделенную под элементы;
  • matrix.cpp:79. какая-то путаная логика. Почему нельзя в двух for'ах пробовать прочесть поэлементно, предварительно инициализировав data нужным количеством векторов-строк?
  • main.cpp. преобразование символа в номер регистра дублируется.
  • main.cpp:18. почему не std::ifstream?

---
Баллы: 3.5.

comment:4 Changed 4 years ago by podoprigora.ivan

Type: ожидаются исправленияожидается проверка

comment:5 Changed 4 years ago by Артур Гулецкий (huletski)

Type: ожидается проверкаожидаются исправления
  • ошибки в обработке файлов неверного формата (тестируйте load);
  • у некоторые сообщений об ошибке неверный формат, перепроверяйте.

matrix.h

  • зачем нужно поле MatrixException::ex_num?
  • MatrixException? хранит внутри указатель на аргумент переданный в конструкторе. Почему это плохо, обсудили на практике;
  • из матрицы нельзя явно получить значение отдельного элемента: замените метод print_el на метод, возвращающий элемент, значение элемента печатайте в коде интерпретатора;
  • print/load сделайте в виде перегрузки op<<, op>>;

matrix.cpp

  • странно, что после того, как конструктор по умолчанию завершил работу, в data лежит мусор. Инициализируйте все поля.
  • print_el. Отступы, форматирование;
  • op+=. отступы;
  • op*=. базовые гарантии не соблюдаются: если в строке 58 вылетает исключение, кто удалит new_data? Проще было бы использовать RAII объект (временную матрицу) для хранения временного результата, после того как умножение завершилось свопнуть с *this;
  • load. аналогично. Дублирующийся код создания матрицы намекает на необходимость конструктора Matrix(row, col);
  • load. возможность и плюсы использования потока в режиме "если устанавливаешь error bit, брось исключение" обсудили на занятии;

Баллы: 4, стало немного лучше, но все еще нужно доделывать.

comment:6 Changed 4 years ago by Артур Гулецкий (huletski)

Version: 1.02.0

comment:7 Changed 4 years ago by Артур Гулецкий (huletski)

Resolution: задача сдана
Status: assignedclosed

Дедлайн.

Note: See TracTickets for help on using tickets.