Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Sonance
6 / 6 / 3
Регистрация: 15.02.2013
Сообщений: 55
#1

Свой деструктор для каждого класса в массиве - C++

09.05.2014, 20:58. Просмотров 208. Ответов 4
Метки нет (Все метки)

Предположим есть класс(описывающий какой либо обьект в нескольких переменных), у него есть деструктор, который при вызове сохраняет все переменные в файл. Если содать массив обьектов такого класса и в ходе программы изменить описывающие переменные для нескольких объектов массива, то все объекты сохраняют свои переменные перезаписывая один и тот же файл. Хотелось бы чтобы каждый объект сохранял свои переменные в разный файл.
Как сделать это отдельной функцией и так понятно. Вопрос в том, можно ли сделать так, чтобы деструктор знал под каким номером в массиве находится объект и записывал его переменные в файл с его номером.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2014, 20:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Свой деструктор для каждого класса в массиве (C++):

Написать деструктор для данного класса - C++
Как лучше написать деструктор для класса: class Library{ private: struct books{ char* name; int year; ...

Дописать конструктор и деструктор для класса - C++
Помогите пожалуйста написать конструктор копии и деструктор, а также вызвать их, чтобы деструктор выводил на экран "работает" #include...

Для класса задать конструктор и деструктор - C++
Ребята,нужна помощь в написании программы. Для класса задать конструктор(для выделения памяти,открытия файлов,задания начальных значений...

Написать для класса деструктор, выводящий надпись - C++
Подскажите пожалуйста, как написать в 71 строке деструктор, так, чтобы при компиляции выводилось на экран "Destruktor rabotaet"? ...

Деструктор для абстрактного класса, использующего static vector - C++
Доброго времени суток. Возникла проблема с написание деструктора абстрактного класса, использующего static vector для хранения ссылок на...

Нужно ли прописывать конструктор и деструктор для чисто виртуального абстрактного класса - C++
Всем привет! Порылся в интернете, но не смог найти конкретного ответа на свой вопрос. Возможно я просто не смог грамотно сформулировать...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
zss
Модератор
Эксперт С++
6359 / 5923 / 1920
Регистрация: 18.12.2011
Сообщений: 15,227
Завершенные тесты: 1
09.05.2014, 21:03 #2
Заведите дополнительно защищенный целочисленный член класса, в который и записывайте номер объекта.
ValeryS
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
09.05.2014, 21:09 #3
Цитата Сообщение от zss Посмотреть сообщение
Заведите дополнительно защищенный целочисленный член класса, в который и записывайте номер объекта.
и статический
тогда можно сделать так
C++
1
2
3
4
5
6
7
8
9
10
11
12
class A
{
static int namber;
public:
A(){namber++;};
~A(){
  char buf[100];
  sprintf(buf,"file%d", namber);
fopen(buf,"w");
...............
};
A:namber=0;
каждый созданный объект будет увеличивать namber
Sonance
6 / 6 / 3
Регистрация: 15.02.2013
Сообщений: 55
09.05.2014, 21:16  [ТС] #4
По подробнее хотелось бы если можно, вот например:
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
class Test {
    private: void initWeight(){
                double a[14];
                std::ifstream F;
                F.open("test.txt", std::ios::in);
                int i(0);
                while (!F.eof()){
                    F>>a[i];
                    i++;
                }
                int c(0);
                for(int i = 0; i<5;i++){
                    for(int k = 0; k<3; k++){
                        weight[i][k] = a[c];
                        c++;
                    }
                }
                F.close();
             }
             void saveWeight(){
                 std::ofstream f;
                 f.open("test.txt", std::ios::out);
                 for(int i = 0; i<5;i++){
                     for(int k = 0; k<3; k++){
                         f<<weight[i][k]<<"\t";
                     }
                 }
                 f.close(); 
             }
    public: 
            Test(){
                                 initWeight();
                
            }
               
            ~Test(){
                                   saveWeight();
            }
        
            bool Recog(){
 
                }
                if (sum > limit)
                    return TRUE;
                else
                    return FALSE;
            }
};
 
void main(){
    Test arr[15];
        
}
Добавлено через 3 минуты
Цитата Сообщение от ValeryS Посмотреть сообщение
тогда можно сделать так
Вот то что нужно вроди бы, пойду попробую.
zss
Модератор
Эксперт С++
6359 / 5923 / 1920
Регистрация: 18.12.2011
Сообщений: 15,227
Завершенные тесты: 1
09.05.2014, 21:19 #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Примерно так:
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
class Test {
    private:
int number;
static int count; 
void initWeight(){
                number=count++;
                double a[14];
                std::ifstream F;
                string fname="test.txt"+number;
                F.open(fname.c_str(), std::ios::in);
                int i(0);
                while (!F.eof()){
                    F>>a[i];
                    i++;
                }
                int c(0);
                for(int i = 0; i<5;i++){
                    for(int k = 0; k<3; k++){
                        weight[i][k] = a[c];
                        c++;
                    }
                }
                F.close();
             }
            ....
};
int  Test::count=1;
void main(){
    Test arr[15];
        
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.05.2014, 21:19
Привет! Вот еще темы с ответами:

нужен ли свой деструктор - C++
Есть класс class Vetv { public: Vetv(int a,int b, int *ves); Vetv(); virtual ~Vetv(void); int nFrom; int nTo; int...

Как сделать для каждого представления свой ControlBar - C++
как сделать чтобы панель управления менялась(была разной) для каждого представления либо как для каждого представления добавлять...

деструктор класса - C++
Здравствуйте! Я скопировал код отсюда https://msdn.microsoft.com/ru-ru/library/6t4fe76c.aspx себе в Visual Studio 2015, после...

Деструктор класса - C++
Имеется собственный класс, возник вопрос, деструктор класса вызывается не явно ? если так, то в какой момент он вызывается ?


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
09.05.2014, 21:19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru