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

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

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

C++ нужен ли свой деструктор
C++ _BLOCK_TYPE_IS_VALID при вызове деструктора класса
Как сделать для каждого представления свой ControlBar C++
Деструктор класса C++
Деструктор абстрактного класса C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,154
Завершенные тесты: 1
09.05.2014, 21:03     Свой деструктор для каждого класса в массиве #2
Заведите дополнительно защищенный целочисленный член класса, в который и записывайте номер объекта.
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
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
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,154
Завершенные тесты: 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];
        
}
Yandex
Объявления
09.05.2014, 21:19     Свой деструктор для каждого класса в массиве
Ответ Создать тему
Опции темы

Текущее время: 12:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru