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
comment:2 Changed 4 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
На валидном примере получил load error occurred, exiting
По условию должно быть Item price:
comment:3 Changed 4 years ago by
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
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 1.0 → 2.0 |
Из замечаний исправлено все, кроме type у сотрудника. Непонятно, как выносить ее в базовый класс, оставляя именно константой, а не полем.
comment:5 Changed 4 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
STREAM_HANDLER(outs, << "\nItems price: ")
должно быть "Item price: "
Классы стоит помечать как final, если от них не предполагается наследоваться, а конструкторы делать explicit (нужно ли пояснить, почему?)
EmployeesArray? остался без внимания
Пока не до конца понятно, как именно обрабатывать ошибки.