Opened 4 years ago

Closed 4 years ago

#659 closed ожидается проверка (задача сдана)

WW #11

Reported by: gabitov.daniil Owned by: Артур Гулецкий (huletski)
Component: WW cpp_io Version: 2.0
Keywords: Cc:

Description


Change History (7)

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

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

Решение не собирается:

{lab_11}[2001]$ pwd && svn up && svn status && make
/home/hfx/dvl/cpp19/gabitov.daniil/lab_11
Updating '.':
At revision 2544.
mkdir -p obj
g++ -c -o obj/main.out -g -fsanitize=address -Iinclude -Werror -pedantic src/main.cpp
g++ -c -o obj/bin_manip.out -g -fsanitize=address -Iinclude -Werror -pedantic src/bin_manip.cpp
src/bin_manip.cpp: In function ‘std::ifstream& operator>>(std::ifstream&, const read_bool&)’:
src/bin_manip.cpp:47:1: error: no return statement in function returning non-void [-Werror=return-type]
   47 | }
      | ^
cc1plus: all warnings being treated as errors
Makefile:14: recipe for target 'obj/bin_manip.out' failed
make: *** [obj/bin_manip.out] Error 1

Если починить компиляцию, программа выводит данные в неверном формате ("Sold Items", а не "Sold items") .

Некоторые замечания/вопросы по стилю/корретности:

  • rule of 3/5 для class Employee;
  • зачем делать поля Employee protected, когда есть геттеры (getName, getSalary)?
  • Employee::input - для названий методов используйте глаголы в общем случае (e.g. print);
  • employee.h:32. отступы;
  • employee.h:81. Вектор должен хранить элементы типа Employee *, а не const Employee *;
  • bin_manip.cpp:63 - цикл явный зачем? напишите реализацию в одну строку (hint: std::strlen);
  • main.cpp:36. Дублирование кода в ветках if;
  • employee.cpp:12. 101? Почему не nullptr?
  • employee.cpp:46. В список инициализации; нужно убрать 101, нужный размер буфера можно вычислить;
  • employee.cpp:123, 133. Частичное дублирование кода, нужно избавиться;
  • employee.cpp:280. Дублирование кода, который ставит в соответствие целочисленному значению объект определенного типа (см. main.cpp). Это плохо, потому что при добавлении новых наследников Employee нужно будет менять код в двух местах. Кроме того, значения, которые определяют тип сотрудника лучше сделать константами (можно внутри соответствующего класса).

Баллы: 3, нужно доделывать.

comment:2 Changed 4 years ago by gabitov.daniil

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

В задании сказано, что все входные данные корректные - не ставил failedbit для bool. Для считывания имени поставил т.к. это требует задание.

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

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

В задании сказано, что все входные данные корректные - не ставил failedbit для bool.

Где именно в задании сказано, что _все_ входные данные (в том числе в бинарных файлах) корректные?

Для считывания имени поставил т.к. это требует задание.

Задание требует: "все операторы ввода-вывода и вспомогательные манипуляторы должны корректно обрабатывать ошибки и сигнализировать о них. Например, если read_c_str ...". Это не тоже самое что "реализуйте обработку ошибок [только] для считывания c-string".


В общем, нужны цитаты из задания, которые подтверждают ваши слова. Решение проверю после вашего ответа, чтобы не отнимать баллы из-за того, что задание было не так понято кем-то из нас.

comment:4 Changed 4 years ago by gabitov.daniil

"Все команды корректны, числа в текстовом формате записываются в обычном десятичном виде." Возможно, я это неправильно понял

comment:5 Changed 4 years ago by gabitov.daniil

Добавил failbit

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

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

"Все команды корректны, числа в текстовом формате записываются в обычном десятичном виде." Возможно, я это неправильно понял

В этом пункте речь о _командах_ CLI (add, list, ect.): валидация данных, переданных через терминал, необязательна; про гарантии для бинарных файлов не сказано ничего.

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

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

Замечания:

  • с форматированием стало еще хуже ("Sold Items", а не "Sold items"; "Base salary", а не "Base Salary") -> -0.5;
  • main.cpp:5, 6. "string.h" -> <string> или <cstring>, "assert.h" -> <cassert>
  • main.cpp:20. (opt) можно было открыть файл неявно, передав аргументы в конструкторе;
  • bin_manip.cpp:1, 3. <cstdint>, <cstring>
  • bin_manip.cpp:14. манипуляторы чтения/записи int32_t в little-endian реализованы неполностью, т.к. не гарантируется порядок записи байтов (на big-endian машине значение будет записано неверно) -> -1;
  • bin_manip.cpp:89. чтение ломается, если в базе записано имя длиной 100 -> -0.5;
  • bin_manip.cpp:98. лучше считать текущее значение маски флагов, установить нужный бит, записать обновленное, а не переписать текущее состояние, т.к. могут сброситься другие биты, установленные ранее;
  • employees.cpp:44, 87: списки инициализации;
  • employees.cpp:54. using std::swap, namespace включать не обязательно;
  • employees.cpp:68, 69. лучше заменить связку "вызов конструктора по умолчанию, вызов оператора присваивания" на "вызов конструктора копирования" (new Developer(*this)).

За мелкие замечания по совокупности -1.5.

Баллы: 6.5.

Note: See TracTickets for help on using tickets.