Opened 4 years ago

Closed 4 years ago

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

WW# 11

Reported by: onofriychuk.ilya Owned by: Sokolov Viacheslav
Component: WW cpp_io Version: 3.0
Keywords: Cc:

Description


Change History (6)

comment:1 Changed 4 years ago by Sokolov Viacheslav

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

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

comment:2 Changed 4 years ago by onofriychuk.ilya

Version: 1.02.0

comment:3 Changed 4 years ago by onofriychuk.ilya

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

comment:4 Changed 4 years ago by Sokolov Viacheslav

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

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

void add(const Employee *e)
такой интерфейс порождает неудобство, требуется копирование. Проще было бы исправить сам интерфейс (принимать объект во владение). В неучебных целях здесь стоило бы использовать std::unique_ptr.

Один символ удобнее добавлять с помощью put

54 value = false;
55 if (int(val)) {
56 value = true;
57 }
можно же просто value = static_cast<bool>(val)?

68 for (char ch: str) {
69 os.write(&ch, 1);
70 }
71 char str_end = '\0';
72 os.write(&(str_end), 1);

можно разом вывести strlen(str) + 1 символ

92 if (cur_length == max_length && ch != '\0')
93 is.clear(std::ios::failbit);

по какой причине clear, а не setstate?

В манипуляторах отсутствует проверка успешности взаимодействия с потоком.

Если какая-то манипуляция не удалась, стоит немедленно остановить исполнение (достаточно обозначить намерение и поставить assert, хоть это и неправильно, потому что assert - это предположение об условиях работы, и включать в них отсутствие внешних проблем можно только в учебных целях)

46 Developer* copy = new Developer(*this);
47 return copy;

какая мотивация заводить переменную?

между
158 std::ifstream& operator>>(std::ifstream& ifs, EmployeesArray?& employees) {
и
197 std::istream& operator>>(std::istream& is, EmployeesArray?& employees) {
дублируется код. Может быть, можно с этим что-то сделать?

comment:5 Changed 4 years ago by onofriychuk.ilya

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

Не удалось только избавиться от дублирования кода. Из-за различия операторов ввода для Employee из файла и из стандартного потока

comment:6 Changed 4 years ago by Sokolov Viacheslav

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

Манипуляторы остались не помеченными как final

read_string проще было бы реализовать с помощью getline, а считать один символ - с помощью get

Note: See TracTickets for help on using tickets.