Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

16.02.2012, 00:21. Просмотров 573. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.02.2012, 00:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Помогите пожалуйста преобразовать функцию в деструктор. (Полностью рабочая программа уже написана) (C++):

Примитивная лаба по классам. Уже написана. Не компилится - C++
Здравствуйте! Прога выдает ошибку. Делал по примеру друга. Прога аналогичная. Оба кода прилагаю. Мой код: #include &lt;iostream&gt; ...

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

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

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

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

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

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

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


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

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

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

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

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

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

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

Правильно ли программа написана?напишите пожалуйста без true,false - Pascal ABC
задача: дана последовательность из 50 символов. В ней есть слова, которые могут содержать от 3 до 8 букв. Слова отделяются друг от друга...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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