Opened 4 years ago

Closed 4 years ago

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

WW #11

Reported by: tarasov.denis Owned by: Sokolov Viacheslav
Component: WW cpp_io Version: 3.0
Keywords: Cc:

Description


Change History (5)

comment:1 Changed 4 years ago by Sokolov Viacheslav

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

Классы стоит помечать как final, если от них не предполагается наследоваться, а конструкторы делать explicit (нужно ли пояснить, почему?)

отсутствует проверка успешности чтения из потоков (если где-то что-то пошло не так, программа продолжит исполнение)

какая мотивация не использовать istream.read по аналогии с ostream.write (кажется, что чтение и запись аналогичны друг другу)?

В реализации le-операций используется порядок байт в системе

https://stackoverflow.com/questions/4897844/is-sizeofbool-defined-in-the-c-language-standard

187 std::cout << "Stream is corrupted\n";
не самое понятное для пользователя сообщение

Какая мотивация использовать malloc, а не new[] для EmployeesArray? ?

Зачем в add делать clone и потом удалять исходный объект в месте вызова?

comment:2 Changed 4 years ago by tarasov.denis

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

comment:3 Changed 4 years ago by Sokolov Viacheslav

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

Остался отладочный вывод 46 std::cout << stream.fail();

Для ошибок есть специальный поток std::cerr

stream.read(&byte, 1);
можно же просто stream.read()?

не все манипуляции проверяются на успешность
std::cout << a << b;
Происходит 2 операции вывода. Первая операция может не получиться, а вторая - получиться. Флаги нужно проверять после каждой операции вывода (что конечно же затруднительно).
Если для записи это не так важно, то вот со чтением все хуже:
in >> _name >> _base_salary >> _has_bonus;
после ввода
aba caba true
флаги будут гласить, что ввод успешно произошел.
По этой причине гораздо проще иметь дело с исключениями.
Если их в арсенале нет, можно использовать манипуляторы, которые возьмут проверку на себя.

Методы clone больше не нужны

В c++ нет необходимости использовать define для констант. Есть static constexpr; кроме того, в данном случае лучше использовать enum (class)

comment:4 Changed 4 years ago by tarasov.denis

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

comment:5 Changed 4 years ago by Sokolov Viacheslav

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

46 _name = new char[max_name_len];

+1.

Note: See TracTickets for help on using tickets.