Opened 4 years ago

Closed 4 years ago

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

WW #11

Reported by: Surkov Petr 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: ожидается проверкаожидаются исправления
lab_11: src/employees.cpp:136: std::ofstream& EmployeesArray::operator<<(std::ofstream&) const: Assertion `_employees' failed.

comment:2 Changed 4 years ago by Surkov Petr

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

comment:3 Changed 4 years ago by Sokolov Viacheslav

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

Классы стоит помечать как final, если от них не предполагается наследоваться

В bin_manip.h стоит убрать поля в приватную область видимости, потому что не предполагается их использовать для чтения где-либо еще

gcc для языка C, g++ для языка C++. CFLAGS для компиляторов языка C, CXXFLAGS для компиляторов С++.

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

По какой причине инициализация _name (и других полей) происходит в заголовочном файле? Это же часть реализации, которая мало интересует пользователей класса

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

В наследниках Employee лучше явно определять деструктор и конструктор копирования, если он нужен, потому что в базовом классе они нетривиальны.

Между командой add и EmployeesArray::operator>> дублируется код.

В манипуляторах стоит добавить проверки, что манипуляция удалась.

Если write_le_int32 работает только с отрицательными значениями, то нужен assert в конструкторе (и не нужна проверка при манипуляции).

Рекомендую посмотреть на https://en.cppreference.com/w/cpp/io/basic_istream/getline

comment:4 Changed 4 years ago by Surkov Petr

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

comment:5 Changed 4 years ago by Sokolov Viacheslav

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

После некоторых манипуляций не проверяется их успешность (в основном на запись).

В bin_manip.h реализованы конструкторы

EmployeesArray? не помечен как final

Все еще между командой add и EmployeesArray::operator>> дублируется код.

Note: See TracTickets for help on using tickets.