Opened 4 years ago
Closed 4 years ago
#813 closed ожидаются исправления (задача сдана)
WW #14
Reported by: | Kreslavski Kirill | Owned by: | Артур Гулецкий (huletski) |
---|---|---|---|
Component: | WW_exceptions | Version: | 3.0 |
Keywords: | Cc: |
Description
Дико извиняюсь, я как-то продолбал дедлайн, а осознал это совсем не сразу.
У меня, прямо скажем, не работающая нормально версия, отправил то, что было на момент осознования моего косяка. Оно из хорошего умеет только хорошо компилироваться и хорошо выглядеть (возможно). Я её не тестировал от слова совсем, поэтому это своеобразный кот в мешке. Ещё раз прошу прощения, был уверен, что дедлайн во вторник вечером, скорее всего что-нибудь ещё исправлю во вторник.
Change History (8)
comment:1 Changed 4 years ago by
comment:2 Changed 4 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|---|
Version: | → 1.0 |
Замечания:
- программа неверно работает, если попытаться считать файл в неверном формате;
- переделайте хранение данных: используйте хранения в сырых указателях (для тренировки);
matrix.h
- 7: не добавляйте все имена из std в глобальное пространство имен, тем более в хедере;
- 14: override, noexcept
- rule of 3 violation: не хватает чего-то;
- не хватает const у методов, опционально - noexcept;
- 33: аргументы было бы логичнее сделать типа std::size_t или другого unsigned типа;
- print, read лучше реализовать через перегрузку операторов; в read лучше передавать std::istream (разобрали на практике мотивацию).
matrix.cpp
- 19: ловите bad_alloc в main.cpp, пусть код интерпретатора решает какое сообщение печатать;
- 30, 43: именa: sum, product - точнее;
- 58: а зачем this-матрицу умножать? метод же не operator*=;
- 77: дублирование код конструктора, почитайте какие конструкторы есть у вектора, можно одним вызовом конструктора инициализировать данные матрицы (без if и циклов);
- 84: operator= у вектора: matrix_ = other.matrix_? Неясно: используются векторы (контейнер/RAII объект), а явно все равно логику присваивания пишете;
- 115: x3;
- про плюсы использования исключений потоков поговорили на практике;
- 131: исключения можно не перебрасывать, само "вылетит" из метода, если не ловить;
main.cpp
- 24: дублирование (см. код ниже);
- 49: неясно, зачем решено было реализовать op+, а не op+=.
Баллы: 3.5, доделывайте.
comment:3 Changed 4 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|
Я сделал изменения, они не кардинальные, но всё же.
comment:4 Changed 4 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|---|
Version: | 1.0 → 2.0 |
Замечания:
- все еще некорректно обрабатываются файлы в неверном формате (см. ниже).
matrix.h
- MatrixException? лучше наследовать от исключения из стандартной библиотеки (std::exception/std::logic_error). Мотивацию разбирали на практике;
- Matrix хранит элементы в векторе, для тренировки была просьба сделать на указателях;
matrix.cpp
- 9: неясно зачем: пусть бы были пустые векторы;
- 28: к слову, у вектора конструктор есть от начального числа элементов и элемента по умолчанию -> использовали бы его, не нужно было бы цикл писать;
- 55: s/answ/product как в методе выше;
- 75: избыточно, исключение вылетит само, если не ловить -> перебрасывать не обязательно;
- 93-103: дублирование кода конструктора, другая проблема - базовые гарантии не предоставляются: если файл в неверном формате (всего одно число) изменится только n_ -> инвариант matrix_.size() == n_ нарушится в общем случае. Fix: читать во временный объект, если чтение успешно - swap состояния с this;
- 116: а вот это зря. Тут как в сказке про царевну-лягушку: не вы (метод read) открыл поток, не вам (методу read) его и закрывать;
Стало получше, но использование векторов - чит, который практически ootb предоставляет базовые гарантии.
Баллы: 4.5. Можно доделывать, если решите оставить хранение в векторах, максимум будет не 10, а 7.5.
comment:5 Changed 4 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 2.0 → 3.0 |
Я исправил замечания по MatrixException?, исправил обработку некорректных файлов (как мне кажется), изменил создание матрицы на вызов конструкотра 1 вектора, пофиксил баг с отсутствием базовой гарантии в read и закрытием потока там же. Но матрица всё ещё написана на std::vector, потому что я не готов сейчас переписывать её (так как есть новые лабы).
comment:6 Changed 4 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
matrix.h
- 14, 15: вместо
throw()
пишитеnoexcept
; - 14: деструктор можно было явно не писать;
- 15: virtual избыточный, override не хватает.
matrix.cpp
- 8: в список инициализации, ловля bad_alloc и его перебрасывание избыточны;
- 62: same; т.к. элементы хранятся в векторе, явно конструктор копирования можно было не реализовывать (подошел бы сгенерированный по умолчанию);
- 94: не нужно явно перебрасывать исключения, они вылетят и так.
Баллы: учитывая хранение элементов матрицы в векторах, 6.5.
comment:8 Changed 4 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
Я всё доделал, теперь всё работает как должно и оно впринципе работает. Надеюсь, что я не слишком опоздал с дедлайном (хаха, кого я обманываю).