Opened 4 years ago
Closed 4 years ago
#778 closed ожидается проверка (задача сдана)
WW #14
Reported by: | gordeeva.tatyana | Owned by: | Артур Гулецкий (huletski) |
---|---|---|---|
Component: | WW_exceptions | Version: | 3.0 |
Keywords: | Cc: |
Description
Change History (7)
comment:1 Changed 4 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
comment:2 Changed 4 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 1.0 → 2.0 |
"попробуйте переписать код Matrix::load так, чтобы не нужно было считывать файл целиком для проверки валидности"
но там ведь проблема не в error bit'е, а в том, что сама по себе матрица может быть неверно записана, так что мне в любом случае придётся дочитать файл до конца, чтобы это выяснить
comment:3 Changed 4 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
"попробуйте переписать код Matrix::load так, чтобы не нужно было считывать файл целиком для проверки валидности"
но там ведь проблема не в error bit'е, а в том, что сама по себе матрица может быть неверно записана, так что мне в любом случае придётся дочитать файл до конца, чтобы это выяснить
"Неверно записана" - значит не полностью/в значения в неверном формате (хранятся буквы, например)?
- Не полностью: если читать как читается в один проход, то установится eof (один из error bit'ов) раньше времени;
- Формат: ничего не меняется по сути: установится fail bit (не смогли прочесть очередной int, но данные в потоке еще есть).
В текущей версии проверки на полноту и содержимое неявно делаются в течение первого прохода в условии цикла in >> token
. Если использовать режим чтения с исключениями, проверки явно делать не надо - поток оповестит, если сломался в процессе, выбросив исключение.
Напишите, если я недопонял, зачем обязательно нужно файл в два прохода читать.
Замечания:
matrix.h
- MatrixException? хранит сырой указатель, переданный в конструкторе. Почему лучше так не делать обсудили на практике (неясно, кто данные удаляет);
- Matrix::elem. Если рассматривать Matrix как value type, код, пользующийся матрицей, не может получить значение элемента непосредственно, что странно -> возвращайте из elem'a значение элемента и печатайте его в логике интерпретатора (в main.cpp);
matrix.cpp
- Matrix::Matrix. cписки инициализации;
- Matrix::Matrix. базовые гарантии не обеспечиваются (если bad_alloc в 8, кто и когда освободит память выделенную в 6?);
- op>>. С double read файла все еще открыт вопрос;
main.cpp
- 5: немного неточно: не регистры, а количество регистров, тип size_t;
- преобразование регистра в число лучше вынести в отдельную функцию, чтобы избежать дублирования.
Баллы: 5.5, доделывайте.
comment:4 Changed 4 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 2.0 → 3.0 |
comment:5 Changed 4 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
matrix.h
- у Matrix::elem const не хватает;
matrix.cpp
- (opt) 12: неожиданно видеть вызов деструктора в процессе конструирования (объект еще не создали, а уже удаляем). Можно вынести код освобождения памяти в отдельным метод и вызывать его и в констукторе, и в дестукторе;
- 65: 100+ символьная строка, неудобно воспринимать, нужно разбить на несколько строк;
- баг в operator>>: файл без последнего элемента в последней строке матрицы считывается успешно, хотя не должен.
Баллы: 8.5, можно доделать.
comment:6 Changed 4 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|
comment:7 Changed 4 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
Ок, +10.
FYI: Matrix::deallocate нужно сделать private, возможность вызывать метод у класса извне выглядит странно.
Идейные замечания:
Замечания:
new int[mul.width]
, чтобы инициализация стала неявной;Баллы: 4, нужно доделывать.