Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
 Аватар для fors-dnet
3 / 3 / 0
Регистрация: 11.12.2011
Сообщений: 88

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

16.02.2012, 00:21. Показов 2092. Ответов 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");
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.02.2012, 00:21
Ответы с готовыми решениями:

Программа уже написана, а понять не могу(
Дан двумерный массив n*m, заполненный случайными числами. Определить, есть ли в данном массиве строка, содержащая больше положительных, чем...

Составить функцию, позволяющую определить позицию первого.Нужно исправить ошибку(програма написана полностью)
При любом значении выбивает ответ: 0. using System; using System.Collections.Generic; using System.Linq; using System.Text; ...

Преобразовать программу. Программа написана
Всем привет у меня не получается сделать так чтобы она работала только в static void Main(string args). вот задание к ней : Путем...

5
 Аватар для AzaKendler
214 / 116 / 14
Регистрация: 30.05.2011
Сообщений: 1,772
Записей в блоге: 15
16.02.2012, 00:25
fors-dnet, в деструктор нельзя передать параметры. НО, поскольку он член класса и имеет доступ к содержимому то в деструкторе можно организовать запись в файловый поток. для хранения имени файла или дескриптора можно создать переменную, закрытую в теле класса. деструктор будет иметь к ней доступ и функционал отработает. Отработает при саморазрушении объекта класса, когда выйдет из видимости. Специально вызывать деструктор в твоем случае не надо.
1
 Аватар для fors-dnet
3 / 3 / 0
Регистрация: 11.12.2011
Сообщений: 88
16.02.2012, 00:37  [ТС]
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 минуты
И всмысле специально вызывать не нужно?, я так понял из теории, что деструктор автоматически вызывается когда объект уничтожается.

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


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

а вызывать его не надо. он сам вызовется после выхода из мэйна.
1
 Аватар для fors-dnet
3 / 3 / 0
Регистрация: 11.12.2011
Сообщений: 88
16.02.2012, 01:07  [ТС]
AzaKendler, спасибо большое всё работает.

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

А вот ещё вопрос - функции из паблика ведь без параметров с массивом элементов работать не будут? (по крайней мере у меня если в функцию параметром не передать указатель на массив элементов, то ерроры бьёт)
0
 Аватар для AzaKendler
214 / 116 / 14
Регистрация: 30.05.2011
Сообщений: 1,772
Записей в блоге: 15
16.02.2012, 01:12
fors-dnet, если массив лежит внутри класса то будут работать с ним напрямую без всяких параметров. а если массив где то за пределами класса то конечно его надо будет передать на обработку через параметр.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.02.2012, 01:12
Помогаю со студенческими работами здесь

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

Нужно написать алгоритм к программе в C#, сама программа уже написана
Не могу написать алгоритм к программе в C#. Вот условие для написания самой программы: Написать программу, которая по введенному значению...

Пожалуйста, проверьте, правильно ли написана программа
Вычислите A1+A3+A5+...+A2N-1 CONST M = 1000; type MAS = array of integer; VAR A:MAS; S,N,I:INTEGER; BEGIN ...

Подскажите пожалуйста на чем написана программа
нужно внести изменения в программу но не знаю даже на чем она написана

Программа Дерево решений. Уже написана на Delphi. А мне надо на PascalABC. Что делать с модулями?
program DoP_777; {$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils, Math; Type


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru