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:2 Changed 4 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 1.0 → 2.0 |
comment:3 Changed 4 years ago by
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
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 2.0 → 3.0 |
comment:5 Changed 4 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
После некоторых манипуляций не проверяется их успешность (в основном на запись).
В bin_manip.h реализованы конструкторы
EmployeesArray? не помечен как final
Все еще между командой add и EmployeesArray::operator>> дублируется код.