#434 closed ожидается проверка (задача сдана)
WW#09
Reported by: | Daniil Lyubaev | Owned by: | Святослав Власов |
---|---|---|---|
Component: | WW figures | Version: | 3.0 |
Keywords: | Cc: |
Description
Вроде все основные функции работают. Добавил один геттер для id
, думаю потом подобавлять еще геттеров и сеттеров.
Еще вопрос, правильно ли я разбил длинное условие в Rectangle::is_inside()
?
Change History (8)
comment:1 Changed 3 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
comment:2 Changed 3 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 1.0 → 2.0 |
Поправил, теперь работает. Только в функции Scheme::remove_figure()
не стал использовать get_figure_by_id()
, потому что там номер тоже нужен.
comment:3 Changed 3 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
- Зачем нужна странная переменная
int num
в функцииremove_figure
? Она никакой полезной функции не несет. - Чтобы избавиться от копи-пасты в
remove_figure
иget_figure_by_id
, последняя может возвращать не указатель на фигуру, а её индекс в массиве. - Очень просятся ассерты в тех местах, где возврат
nullptr
изget_figure_by_id
может привести к крашу
В остальном мне всё нравится. 9/10
comment:4 Changed 3 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 2.0 → 3.0 |
Поправил. Если вместо ассертов вставить if (get_figure_index(id) == -1) return;
, то все работает. А можно как-то не делать несколько ассертов в разных местах, а просто сделать один ассерт в функции get_figure_index()
? Я пытался сделать, но у меня не получилось.
comment:5 Changed 3 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
Ассерт работает следующим образом: если условие истинно -- не происходит ничего и программа продолжает исполнение, если условие ложное -- программа падает.
У тебя в remove_figure
стоит ассерт assert(index == -1)
, т.е. программа продолжит работать только если фигура не будет найдена, в противном случае упадет.
Это явно не то, что ты хочешь.
Поправь ассерты и всё будет хорошо.
comment:6 Changed 3 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|
Ух, я ещё и кривой ассерт написал... А я думал, что программа специально неправильные айдишники сует. Поправил.
Upd.: Насколько плохим решением было бы убрать ассерты из других функций, а в конец get_figure_index()
вместо return -1;
вставить assert(0);
?
comment:7 Changed 3 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
Теперь всё отлично, 10/10
Upd.: Насколько плохим решением было бы убрать ассерты из других функций, а в конец
get_figure_index()
вместоreturn -1;
вставитьassert(0);
?
И тот и другой вариант хороший. Мне тот вариант, который у тебя сейчас, нравится больше -- он позволяет с помощью функции get_figure_index
проверить, есть ли фигура с таким айдишником в схеме и обработать вариант, если её нет. Прямо сейчас в этом нет необходимости, но это повышает расширяемость кода, об этом тоже стоит думать.
comment:8 Changed 3 years ago by
Да, я как раз подумал о том, что лучше не ломать программу, если можно её не ломать :)
Так допустимо (только скобки лишние), но чаще пишут вот так:
Все тесты попадали по одному и тому же ассерту в
Scheme::push_back_figure
, поэтому за корректность пока 0.Если ассерт закомментить, то вылазят следующие ошибки:
Rectangle::is_inside
работает неправильно. Прочитай внимательно условия, х и у -- это координаты центра фигуры, а не его угла.Scheme
.