Opened 4 years ago

Closed 4 years ago

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

WW #11

Reported by: samoylov.viktor Owned by: Sokolov Viacheslav
Component: WW cpp_io Version:
Keywords: Cc:

Description


Change History (5)

comment:1 Changed 4 years ago by Sokolov Viacheslav

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

По условию bonus, items (а не Bonus, Items)

На валидном примере имею

lab_11: src/bin_manip.cpp:77: std::istream& read_c_str::operator>>(std::istream&) const: Assertion `this->z[tmp - this->z - 1] == 0' failed.

comment:2 Changed 4 years ago by samoylov.viktor

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

comment:3 Changed 4 years ago by Sokolov Viacheslav

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

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

Лучше выносить все определения в .cpp, потому что это детали реализации, которые не интересуют пользователей класса, в том числе конструкторы

Лучше избегать совпадения имен аргументов и полей класса, чтобы случайно не ошибиться; конструкции вида x(x) вызывают вопросы (нет ли здесь ошибки). Удобно с помощью code style гарантировать различное именование (например, добавляя уникальный префикс к полям классов)

Переменным стоит давать более понятные имена, чем 'x', 'z' (read_c_str(char *z, size_t x))

11 EmployeesArray?* ea = new EmployeesArray?();
Какая мотивация делать выделение на куче, а не на стэке?

Кажется, если что-то пошло не так (не удалось чтение / запись), стоит остановить работу приложения. Сейчас проверки есть не везде.

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

Текущие реализации le_int32 полагаются на порядок следования байт в представлении числа

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

Из названия reserve непонятно, что гарантированно произойдет удвоение потребляемой памяти, то есть звать этот метод нужно крайне аккуратно

Инициализации лучше делать в списке инициализации, а не в теле конструктора

Между std::ifstream& EmployeesArray::operator>>(std::ifstream& in) и std::istream& EmployeesArray::operator>>(std::istream& in) код дублируется, может быть, можно от этого дублирования избавиться?

Вместо C-style cast (int32_t) лучше использовать static_cast<int32_t>


comment:4 Changed 4 years ago by samoylov.viktor

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

Добавлены манипуляторы для текстового ввода - вывода(теперь почти все assert'ы только в манипуляторах), reserve стал приватным методом, чтобы его невозможно было вызвать неаккуратно, добавлена функция create_employee для уменьшения дублирования кода. Постарался дать переменным в манипуляторах более понятное название, всё остальное также постарался исправить

comment:5 Changed 4 years ago by Sokolov Viacheslav

Resolution: задача сдана
Status: assignedclosed
Note: See TracTickets for help on using tickets.