Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 18.11.2014
Сообщений: 18

Запись динамически созданных объектов в файл

10.03.2016, 22:00. Показов 1394. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Хочу спросить, пока не наделал глупостей. Есть два класса.


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//первый класс, родитель
 
class someObj
 
{
 
 //опустим конструкторы, все дела. в нём есть массив указателей на такой же класс некоего размера
 someObj *someArray[size];
 
} obj;
 
//второй класс, чадушко
 
class childObj: public someObj
 
{
 
 someObj *create();
 
} chiObj;
 
//собственно одна из причин затыка, метод класса, который мне очень нужен
 
someObj *childObj::create()
 
{
 
 return new childObj;
 
}
 
//в определённый момент происходит следующее
 
obj.someArray[0] = chiObj.create(); //т.е. я выделяю память и такой нехитрой конструкцией в массив пихаю динамически созданный объект
 
//ну и когда-нибудь
 
delete obj.someArray[0]; //освобождаю память и грохаю более мне не нужный объект
Так вот между тем как создать и грохнуть объект мне нужно записать некоторые вещи в файл. Как записать строки, числа и т.д., всё ясно. Но я ж тут память выделяю. Вопрос в том, могу ли я записать в память содержимое массива someObj *someArray[size]; в который я ранее запихал объект, созданный в функции someObj *childObj::create(); в которой память выделялась. Я просто не понимаю что в таком случае будет с адресом и смогу ли я получить точно такой же адрес, прочитав из файла и грубо говоря сделать как и было до закрытия программы. Как это организовать? Про чтение/запись много инфы, но чёт про это не найду. Если это не возможно, то пока не наворотил, буду переделывать. Хотя мне почему-то кажется, что выход есть.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.03.2016, 22:00
Ответы с готовыми решениями:

Освобождение памяти динамически созданных объектов
Подскажите, есть к примеру три класса: Class1, Class2, Class3. В Class2 имеется метод, в котором динамически создаю объекты класса...

Удаление динамически созданных объектов собственного класса
Подскажите пожалуйста, у меня есть два класса, член одного - динамический массив элементов другого класса. При попытке удалить массив -...

События динамически созданных объектов
Доброго всем времени суток! Суть вопроса такова: я динамически в пользовательском классе создаю объект класса TTimer. Мне необходимо...

8
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
10.03.2016, 22:51
Цитата Сообщение от Pseudodog Посмотреть сообщение
Я просто не понимаю что в таком случае будет с адресом и смогу ли я получить точно такой же адрес, прочитав из файла и грубо говоря сделать как и было до закрытия программы. Как это организовать?
Записывать адреса в файл - смысла нет. Нужно записывать содержимое по адресу.
0
52 / 52 / 24
Регистрация: 24.12.2011
Сообщений: 133
10.03.2016, 22:51
Нет, так делать нельзя. После того, как программа закрылась, адрес становится недействительным.
1
0 / 0 / 0
Регистрация: 18.11.2014
Сообщений: 18
10.03.2016, 23:18  [ТС]
Juffin, логично, так и думал в общем-то. спасибо.

nd2, а что подразумевается под содержимым? В массиве someObj *someArray[0]; в моём случае записан экземпляр класса chiObj. Получится, я запишу всё его содержимое в файл? Допустим я так сделал (если правильно понял). Когда я вставлю строку кода с чтением из файла, то я получается просто пихну в этот же массив его содержимое? И программа не обидится, что ранее под это дело при помощи new память выделялась?

Ну что б более предметно:

C++
1
2
3
4
5
obj.someArray[0] = chiObj.create();
 
write();
 
exit();
Программа закрылась. И на следующий запуск пишу:

obj.someArray[0] = read(); //ну совсем условно
//это норм будет?
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
10.03.2016, 23:24
Цитата Сообщение от Pseudodog Посмотреть сообщение
а что подразумевается под содержимым?
Тот объект, который находится по этому адресу (разыменование указателя).
1
52 / 52 / 24
Регистрация: 24.12.2011
Сообщений: 133
10.03.2016, 23:40
Лучший ответ Сообщение было отмечено Pseudodog как решение

Решение

Pseudodog, метод примерно такой:
1) выделили память под объект (new)
2) что-то там с ним сделали, заполнили поля
3) записали в файл
4) освободили память (delete)

Программа закрылась, потом открылась заново.

1) выделили память под объект (new)
2) прочитали поля объекта из файла
1
0 / 0 / 0
Регистрация: 18.11.2014
Сообщений: 18
10.03.2016, 23:42  [ТС]
Juffin, ох =( спасибо, придётся повозиться. суть понял.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
10.03.2016, 23:56
Цитата Сообщение от Pseudodog Посмотреть сообщение
Ну что б более предметно:
Чтобы более предметно, вариант с полиморфизмом:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
const size_t size = 3;
 
class someObj
{
public:
 //опустим конструкторы, все дела. в нём есть массив указателей на такой же класс некоего размера
 someObj *someArray[size];
 virtual void write_file(std::ofstream& fout)
 {
 }
 
 virtual void read_file(std::ifstream& fin)
 {
 }
 
 virtual ~someObj()
 {
    
 }
} obj;
 
//второй класс, чадушко
 
class childObj: public someObj
{
    int x;
public:
    childObj(int a) : x(a)
    {}
 
    //собственно одна из причин затыка, метод класса, который мне очень нужен
    someObj *create(int a)
    { return new childObj(a); }
 
    virtual void write_file(std::ofstream& fout)
    {
        fout << x << '\n';
    }
 
    virtual void read_file(std::ifstream& fin)
    {
        fin >> x;
    }
 
    virtual ~childObj()
    {
    }
 
} chiObj(0);
 
 
int main(/*int argc, char **argv*/)
{
    //в определённый момент происходит следующее
    for (int i = 0; i < size; ++i)
        obj.someArray[i] = chiObj.create(i + 1); //т.е. я выделяю память и такой нехитрой конструкцией в массив пихаю динамически созданный объект
    
    std::ofstream fout("objects.txt");
    for (int i = 0; i < size; ++i)
        obj.someArray[i] ->write_file(fout);
    fout.close();
 
     //ну и когда-нибудь
    for (int i = 0; i < size; ++i)
        delete obj.someArray[i]; //освобождаю память и грохаю более мне не нужный объект
    
    someObj obj2;
    for (int i = 0; i < size; ++i)
        obj2.someArray[i] = chiObj.create(0);
 
    std::ifstream fin("objects.txt");
    for (int i = 0; i < size; ++i)
        obj2.someArray[i] ->read_file(fin);
    fin.close();
 
     //ну и когда-нибудь
    for (int i = 0; i < size; ++i)
        delete obj2.someArray[i]; //освобождаю память и грохаю более мне не нужный объект
 
    std::system("pause");
}
1
0 / 0 / 0
Регистрация: 18.11.2014
Сообщений: 18
10.03.2016, 23:58  [ТС]
nd2, крутяк, буду изучать. спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.03.2016, 23:58
Помогаю со студенческими работами здесь

Удаление динамически созданных объектов
Приветствую. Вопрос поднимался, но что то не получается! Создаю объекты в цикле PanMap = new TPanel(Panel1); PanMap-&gt;Tag = TagMap;...

Удаление динамически созданных объектов
Здравствуйте. Не могу понять, как можно удалять динамически созданные объекты при смене вкладки в TPageControl Добавлено через 3 часа...

Удаление динамически созданных объектов
добрый день. чувствую себя полным нубом)) столкнулся с проблемой: на динамически созданной форме необходимо удалить динамически созданную...

Удаление динамически созданных объектов
Помогите плз. Пишу курсач по МИО. Вот ща работаю над интерфейсом. Я по нажатию кнопку создаю динамически объект edit. Хочу теперь при...

События динамически созданных объектов
Всем привет :) Вопрос в том, как сделать отдельные события для каждой динамически созданной кнопки ? Пока получилось только для всех...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru