я хочу записать объект в файл (* .txt)
class MyCircle{
double x;
double y;
double radius;
char index;
int check;}
class Question{
int index;
int quantityOfAnswers;
MyCircle [] arrCircles;
char solution;}
class answersShee{
int answersSheetID;
string answersSheetName;
int quantityOfCandidateID;
int quantityOfCodeExamination;
int quantityOfQuestion;
Question arrCandidateIDs[quantityOfCandidateID];
Question arrCodeExaminations[quantityOfCodeExamination];
Question arrQuestions[quantityOfQuestion];}
я хочу написать и прочитать класс answersSheet в файл (*. txt), но в C ++ нет записи объекта, как в Java 🙁
Я действительно не понимаю. Есть много решений, существующих в Интернете. Ищите «Сериализация объектов c ++».
Прежде чем начать запись объекта в файл, вам необходимо решить, пишете ли вы двоичный или же текстовый представления.
двоичный представление отражает биты и байты представления платформы. Числа и другие структуры не могут быть легко читаемыми при просмотре в текстовом редакторе. Обычно это наиболее эффективное, но наименее портативное решение. Указатели не преуспевают, как и многобайтовые целые числа (исследование «Endianess» или «little endian»). Поля переменной длины требуют большей структуры в двоичном поле (например, поле длины или значение дозорного).
текстовый представление является читаемой человеком формой. Текстовая форма более удобна для восприятия человеком. Эта форма медленнее для чтения и записи (из-за перевода в и из текстового формата). Кроме того, значения указателя не переносятся в этом формате (если только вы не используете числовые значения ссылки).
В интернете множество примеров. Я подведу итог и скажу, что эта функциональность обычно включает в себя перегрузку operator <<
а также operator >>
, Что означает добавление функциональности к вашим классам и структурам (или вы можете сделать автономную функцию).
Многие люди используют их. Я не могу рекомендовать или не рекомендовать их, потому что я не использовал их. Таким образом, эти библиотеки упрощают чтение и запись объектов из файла и в файл.
Опять же, это требует добавления функциональности к вашим классам и структурам (или создания автономных функций). Я хотел бы расширить типичный случай использования std::istream::read
а также std::ostream::write
методы.
Я использую технику:
1. Запросить у каждого объекта размер, который он будет занимать в буфере, и суммировать значения.
1.1. Это рекурсивный, каждый объект будет спрашивать каждого члена о его размере.
2. Выделение буфера uint8_t
для размера.
3. Передайте указатель на буфер каждому объекту и скажите каждому объекту записать его содержимое в том месте, на которое указывает указатель буфера (объекты соответственно увеличат указатель).
4. Записать буфер как один большой блок, используя двоичный перевод, в файл.
5. Чтение аналогично, другой порядок.