Доброго времени суток. Есть класс, есть менюшка для работы с классом (добавление, вывод объектов класса, удаление) Каким образом организовать запись и чтение полей класса?? (Можно и бинарный файл)
Т.е. мне идейно не понятно как это будет работать :(
Думаю что взять блоковую запись-вывод. (Один объект - одна строка) Но не понятно, как связать всё это с тем что я уже имею.
Буду благодарен если кто-то прояснит.
Ну, тут кода многовато.
Если очень кратко, то как-то так:
while ( x != EXIT)
{
cin.clear();
menu();
cin >> x;
switch (x)
{
case ADD:
{
MemPtr=AddMemory(MemPtr); // выделение памяти под объект, если объектов 0, выделяется 1 ячейка, если уже существуют объекты - то выделяется на 1 больше, а старый массив перезаписывается. Там же вызывается функция для заполнения полей объекта.
system("cls");
break;
}
case SHOW:
{
MemPtr->ShowM(MemPtr);
break;
}
case DELETE:
{
MemPtr=Delete(MemPtr);
break;
}
case EXIT:
{
break;
}
}
}
return 0;
Members * AddMemory(Members * ptr)
{
//FILE *in;
//if (!(in = fopen("xx.txt", "wb")))
{
printf("Open file failed.\n");
}
if (Members::exist == 0)
{
ptr = new Members[Members::exist + 1];
fwrite(ptr, sizeof(Members), 1, in);
fclose(in);
}
else
{
Members *tmp = new Members[Members::exist+1];
for (int i = 0; i < Members::exist; ++i)
{
tmp[i] = ptr[i];
}
delete[] ptr;
ptr = tmp;
}
ptr[Members::exist].AddMember();
Members::exist++;
return ptr;
}
Пусть у нас есть класс A
. Тогда, записывать будем каждое поле класса отдельно. В силу того, что есть строгая последовательность, то при считывании мы однозначно восстановим наши данные. Это легко сделать:
class A {
p1 int;
p2 int;
p3 int;
}
void WriteToFile(vector <A> vec, string pathToFile) {
ofstream fout;
fout.open(pathToFile);
fout << vec.size();
for (int i = 0; i < vec.size(); ++i) {
fout << vec[i].p1 << vec[i].p2 << vec[i].p3;
}
fout.close();
}
vector <A> vec ReadFromFile(string pathToFile) {
ifstream fin;
fin.open(pathToFile);
int n;
fin >> n;
for (int i = 0; i < vec.size(); ++i) {
fin >> vec[i].p1 >> vec[i].p2 >> vec[i].p3;
}
fin.close();
}
void WriteToFile(A *vec, int n, string pathToFile) {
ofstream fout;
fout.open(pathToFile);
fout << n;
for (int i = 0; i < vec.size(); ++i) {
fout << vec[i].p1 << vec[i].p2 << vec[i].p3;
}
fout.close();
}
int *A ReadFromFile(int &n, string pathToFile) {
ifstream fin;
fin.open(pathToFile);
int n;
A *vec = new A[n];
fin >> n;
for (int i = 0; i < vec.size(); ++i) {
fin >> vec[i].p1 >> vec[i].p2 >> vec[i].p3;
}
fin.close();
}
Небольшое пояснение к коду. Будем поочерёдно перебирать элементы нашего массива и записывать их в файл. На каждой итерации будем поэлементно писать поля класса A
.
Замечу, что коль скоро Вы поэлементно считываете и обрабатываете элементы массива, имеет смысл каждый обработанный элемент сразу записывать в файл, если число элементов достаточно большое. Это следует предпринимать, если все считываемые элементы в память не помещаются.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Например, есть QMainWindow, где находится форма входа (логин, пароль)При нажатии открывается еще один QMainWindow, уже сама программа, а старое окно закрывается...
У меня в объекте класса хранится инициализированный массивТеперь нужно в отдельной функции сделать манипуляции с этим массивом, но мне его...
Нужно найти все натуральные числа, не делящиеся ни на один из квадратов простых чисел и не превышающие число N (1 <= N <= 10^9)