fstream — три вложенных объекта в файл * .txt в переполнении стека

я хочу записать объект в файл (* .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 🙁

-2

Решение

Я действительно не понимаю. Есть много решений, существующих в Интернете. Ищите «Сериализация объектов c ++».

Двоичное или текстовое представление в файле.

Прежде чем начать запись объекта в файл, вам необходимо решить, пишете ли вы двоичный или же текстовый представления.

двоичный представление отражает биты и байты представления платформы. Числа и другие структуры не могут быть легко читаемыми при просмотре в текстовом редакторе. Обычно это наиболее эффективное, но наименее портативное решение. Указатели не преуспевают, как и многобайтовые целые числа (исследование «Endianess» или «little endian»). Поля переменной длины требуют большей структуры в двоичном поле (например, поле длины или значение дозорного).

текстовый представление является читаемой человеком формой. Текстовая форма более удобна для восприятия человеком. Эта форма медленнее для чтения и записи (из-за перевода в и из текстового формата). Кроме того, значения указателя не переносятся в этом формате (если только вы не используете числовые значения ссылки).

Запись текстового представления в файл.

В интернете множество примеров. Я подведу итог и скажу, что эта функциональность обычно включает в себя перегрузку operator << а также operator >>, Что означает добавление функциональности к вашим классам и структурам (или вы можете сделать автономную функцию).

Сериализация библиотек

Многие люди используют их. Я не могу рекомендовать или не рекомендовать их, потому что я не использовал их. Таким образом, эти библиотеки упрощают чтение и запись объектов из файла и в файл.

Написание двоичного формата

Опять же, это требует добавления функциональности к вашим классам и структурам (или создания автономных функций). Я хотел бы расширить типичный случай использования std::istream::read а также std::ostream::write методы.

Я использую технику:
1. Запросить у каждого объекта размер, который он будет занимать в буфере, и суммировать значения.
1.1. Это рекурсивный, каждый объект будет спрашивать каждого члена о его размере.
2. Выделение буфера uint8_t для размера.
3. Передайте указатель на буфер каждому объекту и скажите каждому объекту записать его содержимое в том месте, на которое указывает указатель буфера (объекты соответственно увеличат указатель).
4. Записать буфер как один большой блок, используя двоичный перевод, в файл.
5. Чтение аналогично, другой порядок.

0

Другие решения


По вопросам рекламы [email protected]