Opened 4 years ago

Closed 4 years ago

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

WW #11

Reported by: Bagryanova Ekaterina Owned by: Sokolov Viacheslav
Component: WW cpp_io Version: 2.0
Keywords: Cc:

Description


Change History (3)

comment:1 Changed 4 years ago by Sokolov Viacheslav

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

lab_11: src/employees.cpp:88: virtual void Developer::fstream_read(std::ifstream&): Assertion `_has_bonus' failed.

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

20 in.read(&c, 1);

можно же просто in.read(c)? (с write та же история)

57 out.write(data.x, strlen(data.x));

можно же сразу strlen+1?

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

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

Между 7 void add(EmployeesArray?& array) и 202 std::ifstream& operator >> (std::ifstream& in, EmployeesArray?& array) {
код дублируется, может быть, можно с этим что-то сделать?

Сейчас в этих функциях явно прописаны значения 1,2, из-за чего страдает расширяемость - при добавлении новых Employee будет тяжело следить за тем, что везде все правильно поддержано. Стоит использовать enum (class), чтобы держать все возможные значения в одном месте.

comment:2 Changed 4 years ago by Bagryanova Ekaterina

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

comment:3 Changed 4 years ago by Sokolov Viacheslav

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

195 Developer* cur = new Developer();
196 assert(in.good());
197 in >> *cur;
198 assert(!in.fail());
199 array.add(cur);
200 } else if (type == Employees::SALES_MANAGER) {
201 SalesManager?* cur = new SalesManager?();
202 assert(in.good());
203 in >> *cur;
204 assert(!in.fail());
205 array.add(cur);
здесь можно было бы избежать дублирования кода: единственное отличие - в типе при аллокации

Note: See TracTickets for help on using tickets.