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
Type: | ожидается проверка → ожидаются исправления |
---|
comment:2 Changed 4 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 1.0 → 2.0 |
comment:3 Changed 4 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
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.
lab_11: src/employees.cpp:88: virtual void Developer::fstream_read(std::ifstream&): Assertion `_has_bonus' failed.
Классы стоит помечать как final, если от них не предполагается наследоваться, а конструкторы делать explicit (нужно ли пояснить, почему?)
можно же просто in.read(c)? (с write та же история)
можно же сразу 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), чтобы держать все возможные значения в одном месте.