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

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

Войти
Регистрация
Восстановить пароль
 
fors-dnet
3 / 3 / 0
Регистрация: 11.12.2011
Сообщений: 88
#1

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

16.02.2012, 00:21. Просмотров 559. Ответов 5
Метки нет (Все метки)

Заранее благодарен всем кто поможет.

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

Три еррора:
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++
Здравствуйте! Прога выдает ошибку. Делал по примеру друга. Прога аналогичная. Оба кода прилагаю. Мой код: #include &lt;iostream&gt; ...

Помогите, вычислить функцию, пожалуйста! - C++
Задали 2 задачи, первую решил, а со второй вообще ниче не могу придумать. Помогите, пожалуйста))) Вычислить функцию y=f(x) с...

Правильно ли написана программа? - C++
здравтвуйте! изучаю с++ на данный момент К Л А С С Ы...хотел написать свою простенькую программу на классы и написал..всё работает...(я...

Правильна ли написана программа? - C++
Создайте одномерный массив. Заполните его по формуле (каждый элемент массива должен быть больше его порядкового номера в 2i раза). Выведите...

Правильно ли написана программа? - C++
#include &lt;tchar.h&gt; #include &lt;stdio.h&gt; #include &lt;iostream&gt; int _tmain(int argc, _TCHAR* argv) { std::cout &lt;&lt; &quot;temperature...

Правильно ли написана программа? - C++
//--------------------------------------------------------------------------- #include &lt;vcl.h&gt; #include &lt;iostream&gt; #pragma hdrstop...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
16.02.2012, 00:25     Помогите пожалуйста преобразовать функцию в деструктор. (Полностью рабочая программа уже написана) #2
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
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
16.02.2012, 00:50     Помогите пожалуйста преобразовать функцию в деструктор. (Полностью рабочая программа уже написана) #4
void Abonent :: ~Abonent (void)


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

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

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

А вот ещё вопрос - функции из паблика ведь без параметров с массивом элементов работать не будут? (по крайней мере у меня если в функцию параметром не передать указатель на массив элементов, то ерроры бьёт)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2012, 01:12     Помогите пожалуйста преобразовать функцию в деструктор. (Полностью рабочая программа уже написана)
Еще ссылки по теме:

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

Программа МКБ-10 написана на С++? - C++
Здравствуйте. Скажите, эта программа(МКБ-10) написана на С++? Благодарю.

Правильно ли написана программа? - C++
Задача такова. Перед авиаперелётом на известное расстояние закупается топливо для самолёта. Топливо продаётся в ёмкостях заданного...

Правильно ли написана программа - C++
Почему мне компилятор выдает ошибку после main? #include &lt;stdio.h&gt; #include &lt;conio.h&gt; void main (void) { // вот здесь ...

Сумма (правильно ли написана программа?) - C++
Подскажите, правель но ли написана программа? #include &lt;iostream.h&gt; using namespace std; vad main() { setlocale (LC_ALL,...

Программа написана, но работает неверно - C++
Программа написана, но работает неверно. Ввести символьную строку и заменить все буквы &quot;а&quot; на буквы &quot;b&quot; и наоборот, как заглавные, так и...


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

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

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