Opened 4 years ago
Closed 4 years ago
#650 closed ожидаются исправления (задача сдана)
WW 11
Reported by: | Roman Venediktov | Owned by: | Roman Venediktov |
---|---|---|---|
Component: | WW cpp_io | Version: | 2.0 |
Keywords: | Cc: |
Description
Change History (8)
comment:1 Changed 4 years ago by
Component: | WW_c_io → WW cpp_io |
---|
comment:2 Changed 4 years ago by
Owner: | changed from Дмитрий Свиридкин to Roman Venediktov |
---|---|
Type: | ожидается проверка → ожидаются исправления |
comment:3 follow-up: 6 Changed 4 years ago by
Оказывается, даже при открытии файла для бинарного чтения, при чтении через >>, он игнорирует знаки перевода строки и подобные...
Если запретить конструктор по умолчанию, то у нас не получится читать Employer-а с помощью
istream >> employer
,а придётся делать как-то
Employer *employer{istream}
а мы вроде как раз первого хотели добиться в этой лабе?
comment:4 Changed 4 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 1.0 → 2.0 |
comment:5 Changed 4 years ago by
Owner: | changed from Roman Venediktov to Дмитрий Свиридкин |
---|
comment:6 Changed 4 years ago by
Replying to Roman Venediktov:
Оказывается, даже при открытии файла для бинарного чтения, при чтении через >>, он игнорирует знаки перевода строки и подобные...
Если запретить конструктор по умолчанию, то у нас не получится читать Employer-а с помощью
istream >> employer
,а придётся делать как-то
Employer *employer{istream}
а мы вроде как раз первого хотели добиться в этой лабе?
Режим бинарный/не бинарный -- только про то, как обрабатывать специальные последовательности байт для определенный платформ. Под linux бинарный и не бинарный режим работают одинаково.
Отсутсвие публичного конструктора по умолчанию никак не мешает использовать оператор >>. Лишь бы объект был.
Концептуально конструктор по умолчанию должен создавать объект в каком-то адекватном состоянии, готовом к использованию без дополнительных инициализаций.
comment:7 Changed 4 years ago by
Owner: | changed from Дмитрий Свиридкин to Roman Venediktov |
---|---|
Type: | ожидается проверка → ожидаются исправления |
Поле type_ не имеет смысла -- каждый объект и так знает свой настоящий тип. При этом приватный конструктор можно не убирать.
is_init остается костылем
auto *employees_array = new EmployeesArray;
почему бы не создать на стеке?
Операторы () для массива, видимо, должны быть приватными.
8/10
comment:8 Changed 4 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
lab_11: src/employees.cpp:167: static Employee* EmployeesArray::init_with_type(int): Assertion `false' failed.
Что-то у вас не так из бинарного файла читается. Там точно все нормально было :)
Костыль с is_init можно убрать, например, запретив конструкторы по умолчанию, а для создания объектов предоставить только фабричный статический метод, принимающий stream.
У вектора есть оператор присваивания. Как-то не логично, что чтение не переписывает массив, а дописывает в конец.
в read/write_cstr верните c-строки. Эти манипуляторы для них и задумывались, иначе никакого смысла.
x_{reinterpret_cast<uint32_t &>(x)}
Вот так лучше не делать. Собирайте результат во временную переменную и честно делайте memcpy или static_cast обратно.Объявление и иницализацию не стоит разрывать.
std::ofstream ostr(file_name, std::ios::binary)