Opened 4 years ago

Closed 4 years ago

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

WW #11

Reported by: Solovyev Gleb Owned by: Sokolov Viacheslav
Component: WW cpp_io Version: 2.0
Keywords: Cc:

Description


Change History (5)

comment:1 Changed 4 years ago by Solovyev Gleb

Пока не до конца понятно, как именно обрабатывать ошибки.

comment:2 Changed 4 years ago by Sokolov Viacheslav

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

На валидном примере получил load error occurred, exiting

По условию должно быть Item price:

comment:3 Changed 4 years ago by Sokolov Viacheslav

CFLAGS для компиляторов языка C, CXXFLAGS для компиляторов С++. Компилятор соответственно CXX.

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

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

Не все манипуляции проверяются на успешность. Стоит либо выставить .exceptions(std::iostream::failbit | std::iostream::badbit);
и обрабатывать исключения, либо после каждой манипуляции проверять, что она удачно завершилась (если нет - нужно сообщить пользователю и остановить работу. В рамках этого задания можно поставить assert).

39 if (std::cout.good()) {
40 return 0;
41 }
42 std::cout << "list error occurred, exiting\n";

В cout писать об ошибке с cout немного странно. Для ошибок есть специальный поток std::cerr

Для команд лучше было бы использовать enum (class)

_hash
название сбивает с толку. Лучше назвать так, чтобы было понятно, например command_from_str

Кажется, для RV можно было бы использовать bool (во всех функциях возвращается 0 либо 1). Если хочется какой-то другой код возврата, то стоит использовать enum для того, чтобы явно выразить, что это за код.

6 Employee::Employee(const char *name, int32_t base_salary)
7 : _name{nullptr}, _base_salary{base_salary} {
8 _name = new char[strlen(name) + 1];
9 strcpy(_name, name);

10 }

выделение можно было бы сделать прямо в списке инициализации

Если использовать std::string, то почему не сделать name std::string?

get_copy обычно именуется clone()

this->Employee::operator<<(outs);
здесь this-> можно не писать

По условию у каждого сотрудника предполагается тип, может, вынести его в базовый класс?

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

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

comment:4 Changed 4 years ago by Solovyev Gleb

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

Из замечаний исправлено все, кроме type у сотрудника. Непонятно, как выносить ее в базовый класс, оставляя именно константой, а не полем.

Last edited 4 years ago by Solovyev Gleb (previous) (diff)

comment:5 Changed 4 years ago by Sokolov Viacheslav

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

STREAM_HANDLER(outs, << "\nItems price: ")
должно быть "Item price: "

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

EmployeesArray? остался без внимания

Note: See TracTickets for help on using tickets.