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

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

Восстановить пароль Регистрация
 
fors-dnet
 Аватар для fors-dnet
3 / 3 / 0
Регистрация: 11.12.2011
Сообщений: 88
16.02.2012, 00:21     Помогите пожалуйста преобразовать функцию в деструктор. (Полностью рабочая программа уже написана) #1
Заранее благодарен всем кто поможет.

Здравствуйте, учусь на первом курсе и только разбираюсь с с++. Дошёл уже до деструктора. Полностью рабочая программа представлена ниже, я начал её переделывать (задание было оформить одну из функций как деструктор).
Программа сначала считывает данные с файла, потом сортирует их и сохраняет. Функцию сохранения данных в отдельный файл нужно по заданию оформить как деструктор. Помогите пожалуйста это сделать.

Три еррора:
Abonent::~Abonent: деструктор не может иметь тип возвращаемого значения
Abonent::~Abonent: ошибка в определении или объявлении функции; функция не вызвана
Abonent::~Abonent: ошибка в определении или объявлении функции; функция не вызвана
Не знаю как передать параметры в деструктор (пишет компилятор что этого вообще нельзя делать).


В качестве файла из которого происходит считывание используется обычный txt файл с такими данными:


09342598623 56,30 life
05085458748 23,10 mtc
09765874598 11,20 kyivstar
09345874122 89,65 life
09645874114 11,50 mtc
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#include<iostream>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
 
class Abonent
{
private:   
        char nomer[11];
        double ostatok;
        char tarif[15];
public:
        int load (Abonent *arr);
        int sortost (Abonent *t);
        int sorttar ( Abonent *arr);
        void get(void);
        ~Abonent (void);
 }arr [5];
 
int Abonent:: load (Abonent *arr)
{
    int i=0;
    FILE *f=NULL; 
    f=fopen("D:\Input.txt", "rt");
    if (f==NULL)
    {
        std::cout<< "No file!!!\n";
        exit (0);
    }
        
    for(i=0;i<5;i++)
    {
        fscanf(f,"%s", &arr[i].nomer);
        fscanf(f,"%lf", &arr[i].ostatok);
        fscanf(f,"%s", &arr[i].tarif);
    }
    fclose (f);
 
    return 0;
}
 
 int Abonent:: sortost (class Abonent *t)
 {
        class Abonent x;
        int i=0, j=0;   
        for(i=0;i<5;i++)
        {
                for(j=0; j<4; j++)
                {
                        if( t[j].ostatok > t[j+1].ostatok )
                        {
                                x=t[j];
                                t[j]=t[j+1];
                                t[j+1]=x;
                        }
                        
                }
        }
 
        return 0;       
 }
int Abonent:: sorttar (class Abonent *arr)
{
    int i=0, j=0;
    struct Abonent temp;
    for (i=0; i<5; i++)
    {
        for (j=0; j<4; j++)
        {
            if (strcmp(arr[j].tarif, arr [j+1].tarif) >= 0)
            {
                temp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=temp;
            }
        }
    }
 
    return 0;
}
 
void Abonent :: ~Abonent (void)
{
    int i=0;
    FILE *f=NULL;
    f=fopen ("D:\Result.txt", "wt");
    if (f==NULL)
    {
        std::cout<<"No file!!!\n";
        exit (0);
    }
   
    fprintf (f, "Spisok abonentov:\n\n");
    for(i=0;i<5;i++)
    {
        fprintf(f,"%s\t", arr[i].nomer);
        fprintf(f,"%lf\t", arr[i].ostatok);
        fprintf(f,"%s\t", arr[i].tarif);
        fprintf(f,"\n");
    }
    fclose (f);
 
}
 
void Abonent:: get(void)
{
    setlocale(LC_ALL, "Rus");
    int n=0, i=0;
    while(1)
    {
        std::cout<<"1.Загрузка данных\n2.Сортировка данных по остатку\n3.Сортировка данных по тарифу\n4.Выход (данные будут сохранены автоматически)\n\n";
        std::cout<<"Введите номер выбранного действия: ";
        std::cin>>n;
        std::cout<<std::endl;
 
        switch (n)
        {
            case 1 : load(arr);
                         break;
 
            case 2 : sortost (arr);
                             break;
 
            case 3 : sorttar (arr);
                             break;
 
            case 4 : exit (0);
                        break;
        }
        for (i=0;i<5;i++)
        std::cout<<arr[i].nomer<<'\t'<<arr[i].ostatok<<'\t'<<arr[i].tarif<<std::endl;
        std::cout<<std::endl;
        } 
}
 
void main (void)
{
    class Abonent Abonent_val;
    Abonent_val.get();
    system("pause");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.02.2012, 00:21     Помогите пожалуйста преобразовать функцию в деструктор. (Полностью рабочая программа уже написана)
Посмотрите здесь:

C++ Помогите, вычислить функцию, пожалуйста!
пожалуйста помогите составить программу на языке си. программа с матрицей C++
C++ Очень нужна помощь, знаю что надо было идти учится на парехмахера, но уже позно! Помогите с Матрицами!!Пожалуйста!
C++ Программа МКБ-10 написана на С++?
Примитивная лаба по классам. Уже написана. Не компилится C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
AzaKendler
 Аватар для AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
16.02.2012, 00:25     Помогите пожалуйста преобразовать функцию в деструктор. (Полностью рабочая программа уже написана) #2
fors-dnet, в деструктор нельзя передать параметры. НО, поскольку он член класса и имеет доступ к содержимому то в деструкторе можно организовать запись в файловый поток. для хранения имени файла или дескриптора можно создать переменную, закрытую в теле класса. деструктор будет иметь к ней доступ и функционал отработает. Отработает при саморазрушении объекта класса, когда выйдет из видимости. Специально вызывать деструктор в твоем случае не надо.
fors-dnet
 Аватар для fors-dnet
3 / 3 / 0
Регистрация: 11.12.2011
Сообщений: 88
16.02.2012, 00:37  [ТС]     Помогите пожалуйста преобразовать функцию в деструктор. (Полностью рабочая программа уже написана) #3
AzaKendler, объясни пожалуйста если не сложно как. Просто я всё пишу отталкиваясь от чистого СИ, а там классов не было.

НО, поскольку он член класса и имеет доступ к содержимому то в деструкторе можно организовать запись в файловый поток.
, но ведь другие функции тоже являются членами класса, но при этом они без параметра не будут работать с массивом элементов класса. Вот как например без параметров в деструкторе вот это проделать:
C++
1
2
3
4
5
6
7
for(i=0;i<5;i++)
    {
                fprintf(f,"%s\t", arr[i].nomer);
        fprintf(f,"%lf\t", arr[i].ostatok);
        fprintf(f,"%s\t", arr[i].tarif);
        fprintf(f,"\n");
    }
Добавлено через 3 минуты
AzaKendler, ой сори не заметил что ты дописал сообщение.

C++
1
для хранения имени файла или дескриптора можно создать переменную, закрытую в теле класса. деструктор будет иметь к ней доступ и функционал отработает.
вот это вообще непонятно

Добавлено через 2 минуты
И всмысле специально вызывать не нужно?, я так понял из теории, что деструктор автоматически вызывается когда объект уничтожается.

Мне просто нужно оформить функцию сохранения именно в деструкторе. Если по другому у меня роботу не примут в универе
AzaKendler
 Аватар для AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
16.02.2012, 00:50     Помогите пожалуйста преобразовать функцию в деструктор. (Полностью рабочая программа уже написана) #4
void Abonent :: ~Abonent (void)


C++
1
Abonent :: ~Abonent ()
- вот так прокатит.

а вызывать его не надо. он сам вызовется после выхода из мэйна.
fors-dnet
 Аватар для fors-dnet
3 / 3 / 0
Регистрация: 11.12.2011
Сообщений: 88
16.02.2012, 01:07  [ТС]     Помогите пожалуйста преобразовать функцию в деструктор. (Полностью рабочая программа уже написана) #5
AzaKendler, спасибо большое всё работает.

Я так понял оформлять в виде void названиекласса :: ~названиекласа (void) необязательно? Получается деструктор в отличие от функций имеет прямой доступ к элементам класса и параметры передавать не нужно?

А вот ещё вопрос - функции из паблика ведь без параметров с массивом элементов работать не будут? (по крайней мере у меня если в функцию параметром не передать указатель на массив элементов, то ерроры бьёт)
AzaKendler
 Аватар для AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
16.02.2012, 01:12     Помогите пожалуйста преобразовать функцию в деструктор. (Полностью рабочая программа уже написана) #6
fors-dnet, если массив лежит внутри класса то будут работать с ним напрямую без всяких параметров. а если массив где то за пределами класса то конечно его надо будет передать на обработку через параметр.
Yandex
Объявления
16.02.2012, 01:12     Помогите пожалуйста преобразовать функцию в деструктор. (Полностью рабочая программа уже написана)
Ответ Создать тему
Опции темы

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