Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 24.09.2021
Сообщений: 52

Не получается реализовать деструктор

26.04.2022, 19:43. Показов 954. Ответов 16

Студворк — интернет-сервис помощи студентам
никогда не пользовался указателями, но вот они нужны для деструктора, короче, исправил почти все ошибки, оставшиеся ошибки не знаю как исправить

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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
#include <iostream>
#include <string>
using namespace std;
 
void ENDL();
 
class Organization
{
public:
    string* Street;
    string* HouseNumber;
    string* Location;
    string* Area;
    string* Region;
    string* ZIPCode;
 
    Organization(string a, string b, string c, string d, string e, string f)
    {
        *Street = a; *HouseNumber = b; *Location = c; *Area = d; *Region = e; *ZIPCode = f;
        cout << "Constructor called" << endl;
        ENDL();
    }
 
    string InputStreet(string)
    {
        cin >> *Street;
        return *Street;
    }
    string InputHouseNumber(string)
    {
        cin >> *HouseNumber;
        return *HouseNumber;
    }
    string InputLocation(string)
    {
        cin >> *Location;
        return *Location;
    }
    string InputArea(string)
    {
        cin >> *Area;
        return *Area;
    }
    string InputRegion(string)
    {
        cin >> *Region;
        return *Region;
    }
    string InputZIPCode(string)
    {
        cin >> *ZIPCode;
        return *ZIPCode;
    }
 
    string Check(string a, string b, string c, string d, string e, string f)
    {
        *Street = a; *HouseNumber = b; *Location = c; *Area = d; *Region = e; *ZIPCode = f;
 
        char check;
        cout << "Are you sure? [Y/N]" << endl;
        do
        {
            cin >> check;
        } while (check != 'Y' && check != 'N');
 
        if (check == 'Y')
        {
            cout << "Ok" << endl;
        }
        if (check == 'N')
        {
            {
                WDYWTC(a,b,c,d,e,f);
            }
        }
        return a,b,c,d,e,f;
    }
    string WDYWTC(string a, string b, string c, string d, string e, string f)
    {
        *Street = a; *HouseNumber = b; *Location = c; *Area = d; *Region = e; *ZIPCode = f;
 
        cout << "What do you want to change?" << endl;
        string change;
        cin.ignore(32767, '\n');
        getline(cin, change);
 
        if (change == "Street name" || change == "street name" || change == "street")
        {
            cout << "Enter street name again: ";
            getline(cin, *Street);
        }
        else if (change == "House number" || change == "house number" || change == "house" || change == "housenumber")
        {
            cout << "Enter house number again: ";
            getline(cin, *HouseNumber);
        }
        else if (change == "Location" || change == "location")
        {
            cout << "Enter location again: ";
            getline(cin, *Location);
        }
        else if (change == "Area" || change == "area")
        {
            cout << "Enter area again: ";
            getline(cin, *Area);
        }
        else if (change == "Region" || change == "region")
        {
            cout << "Enter region again: ";
            getline(cin, *Region);
        }
        else if (change == "ZIP Code" || change == "ZIP code" || change == "zip code" || change == "zip Code" || change == "code" || change == "zip" || change == "zipcode")
        {
            cout << "Enter ZIP Code again: ";
            getline(cin, *ZIPCode);
        }
        SmthElse(a,b,c,d,e,f);
        return a, b, c, d, e, f;
        
    }
    string SmthElse(string a, string b, string c, string d, string e, string f)
    {
        *Street = a; *HouseNumber = b; *Location = c; *Area = d; *Region = e; *ZIPCode = f;
 
        cout << "Something else? [Y/N]" << endl;
        char check;
        do
        {
            cin >> check;
        } while (check != 'Y' && check != 'N');
 
        if (check == 'Y')
        {
            {
                WDYWTC(a,b,c,d,e,f);
            }
        }
        if (check == 'N')
        {
            cout << "Ok" << endl;
        }
        return a, b, c, d, e, f;
    }
    string Result(string a, string b, string c, string d, string e, string f)
    {
        *Street = a; *HouseNumber = b; *Location = c; *Area = d; *Region = e; *ZIPCode = f;
 
        cout << "Street name: " << a << endl << "House number: " << b << endl << "Location: " << c << endl << "Area: " << d << endl << "Region: " << e << endl << "ZIP Code: " << f << endl;
        return a, b, c, d, e, f;
    }
    ~Organization()
    {
        cout << "A class' object succesfully Destroyed" << endl;
        ENDL();
        delete[] Street, HouseNumber, Location, Area, Region, ZIPCode;
    }
};
 
void ENDL()
{
    cout << endl;
}
 
string NewObj(string a, string b, string c, string d, string e, string f)
{
    cout << "Do you want to create new Organization's post address? [Y/N]" << endl;
 
    char check;
    do
    {
        cin >> check;
    } while (check != 'Y' && check != 'N');
    if (check == 'N')
    {
        cout << "Ok" << endl;
        exit(0);
    }
    if (check == 'Y')
    {
        Organization* NewOrganization;
 
        cout << "Enter street name: ";
        NewOrganization->InputStreet(NewOrganization->Street);
        ENDL();
        cout << "Enter house number: ";
        NewOrganization->InputHouseNumber(*NewOrganization->HouseNumber);
        ENDL();
        cout << "Enter location: ";
        NewOrganization->InputLocation(*NewOrganization->Location);
        ENDL();
        cout << "Enter area: ";
        NewOrganization->InputArea(*NewOrganization->Area);
        ENDL();
        cout << "Enter region: ";
        NewOrganization->InputRegion(*NewOrganization->Region);
        ENDL();
        cout << "Enter ZIP Code: ";
        NewOrganization->InputZIPCode(*NewOrganization->ZIPCode);
        ENDL();
        NewOrganization->Check(*NewOrganization->Street, *NewOrganization->HouseNumber, *NewOrganization->Location, *NewOrganization->Area, *NewOrganization->Region, *NewOrganization->ZIPCode);
        NewOrganization->Result(*NewOrganization->Street, *NewOrganization->HouseNumber, *NewOrganization->Location, *NewOrganization->Area, *NewOrganization->Region, *NewOrganization->ZIPCode);
        NewOrganization->~Organization();
        NewObj(*NewOrganization->Street, *NewOrganization->HouseNumber, *NewOrganization->Location, *NewOrganization->Area, *NewOrganization->Region, *NewOrganization->ZIPCode);
        return *NewOrganization->Street, * NewOrganization->HouseNumber, * NewOrganization->Location, * NewOrganization->Area, * NewOrganization->Region, * NewOrganization->ZIPCode;
    }
}
 
int main()
{
    NewObj("","","","","","");
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.04.2022, 19:43
Ответы с готовыми решениями:

Как реализовать деструктор в паттерне Composite?
class Component { public: Component(); virtual ~Component(); // операции выполняемые, как с отдельными объектами ...

Создать любой класс. Реализовать конструктор, деструктор, продемонстрировать работу
помогите создать класс любой можно про автомобиль,мяч,прямоугольник и тд...,чтобы были конструктор,диструктор,продемонстрировать работу.. ...

Почему создается виртуальный деструктор A, а в таблице виртуальных функций лежит деструктор B
Почему я делаю виртуальным деструктор A, а в таблице виртуальных функций лежит деструктор B?

16
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
26.04.2022, 20:13
Цитата Сообщение от QYQYA Посмотреть сообщение
но вот они нужны для деструктора
скорее деструктор нужен для для указателей.
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
26.04.2022, 23:09
QYQYA, здесь вам указатели не нужны вообще. Явно определенный деструктор соответственно тоже.
0
0 / 0 / 0
Регистрация: 24.09.2021
Сообщений: 52
26.04.2022, 23:16  [ТС]
без указателей там 40 ошибок, а деструктор нужен, чтобы удалить данные объекта класса, если бы у меня в задании не было этого проклятого деструктора, я бы не создавал тему на киберфоруме
0
фрилансер
 Аватар для Алексей1153
6441 / 5635 / 1127
Регистрация: 11.10.2019
Сообщений: 14,981
26.04.2022, 23:42
QYQYA, полнейшее непонимание происходящего детектед

я довёл до компилябельного состояния, но в процесс не вникал

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
144
145
146
#include <iostream>
#include <string>
 
using std::cin;
using std::cout;
using std::endl;
 
class Organization
{
public:
    std::string Street;
    std::string HouseNumber;
    std::string Location;
    std::string Area;
    std::string Region;
    std::string ZIPCode;
 
public:
    void InputStreet(){cin >> Street;}
    void InputHouseNumber(){cin >> HouseNumber;}
    void InputLocation(){cin >> Location;}
    void InputArea(){cin >> Area;}
    void InputRegion(){cin >> Region;}
    void InputZIPCode(){cin >> ZIPCode;}
 
    void Check()
    {
        char check{};
        cout << "Are you sure? [Y/N]" << endl;
        do
        {
            cin >> check;
        } while (check != 'Y' && check != 'N');
 
        if (check == 'Y')
        {
            cout << "Ok" << endl;
        }
        if (check == 'N')
        {
            WDYWTC();
        }
    }
    
    void WDYWTC()
    {
        cout << "What do you want to change?" << endl;
        std::string change;
        getline(cin, change);
 
        if (change == "Street name" || change == "street name" || change == "street")
        {
            cout << "Enter street name again: ";
            getline(cin, Street);
        }
        else if (change == "House number" || change == "house number" || change == "house" || change == "housenumber")
        {
            cout << "Enter house number again: ";
            getline(cin, HouseNumber);
        }
        else if (change == "Location" || change == "location")
        {
            cout << "Enter location again: ";
            getline(cin, Location);
        }
        else if (change == "Area" || change == "area")
        {
            cout << "Enter area again: ";
            getline(cin, Area);
        }
        else if (change == "Region" || change == "region")
        {
            cout << "Enter region again: ";
            getline(cin, Region);
        }
        else if (change == "ZIP Code" || change == "ZIP code" || change == "zip code" || change == "zip Code" || change == "code" || change == "zip" || change == "zipcode")
        {
            cout << "Enter ZIP Code again: ";
            getline(cin, ZIPCode);
        }
        SmthElse();
    }
    void SmthElse()
    {
        cout << "Something else? [Y/N]" << endl;
        char check{};
        do
        {
            cin >> check;
        } while (check != 'Y' && check != 'N');
 
        if (check == 'Y')
        {
            WDYWTC();
        }
        if (check == 'N')
        {
            cout << "Ok" << endl;
        }
    }
    void Result()const
    {
        cout
        << "Street name: " << Street << endl
        << "House number: " << HouseNumber << endl
        << "Location: " << Location << endl
        << "Area: " << Area << endl
        << "Region: " << Region << endl
        << "ZIP Code: " << ZIPCode << endl;
    }
};
 
void NewObj()
{
    cout << "Do you want to create new Organization's post address? [Y/N]" << endl;
 
    char check{};
    do
    {
        cin >> check;
    } while (check != 'Y' && check != 'N');
    if (check == 'N')
    {
        cout << "Ok" << endl;
        return;
    }
    if (check == 'Y')
    {
        Organization NewOrganization;
 
        cout << "Enter street name: "; NewOrganization.InputStreet(); cout << endl;
        cout << "Enter house number: "; NewOrganization.InputHouseNumber(); cout << endl;
        cout << "Enter location: "; NewOrganization.InputLocation(); cout << endl;
        cout << "Enter area: "; NewOrganization.InputArea(); cout << endl;
        cout << "Enter region: "; NewOrganization.InputRegion(); cout << endl;
        cout << "Enter ZIP Code: "; NewOrganization.InputZIPCode(); cout << endl;
        
        NewOrganization.Check();
        NewOrganization.Result();
    }
}
 
int main()
{
    NewObj();
}
1
0 / 0 / 0
Регистрация: 24.09.2021
Сообщений: 52
27.04.2022, 00:39  [ТС]
спасибо, но я не заметил в вашем коде деструктора, рабочий код у меня и так есть, тот код, что я оставил в теме, это второй вариант с деструктором, который я пытался реализовать, или я всё ещё чего-то не понимаю?

Добавлено через 7 минут
к слову, поясню за задание, мне нужно сделать создание и удаление объектов класса, я с самого начала не понял, что именно от меня хотят, спросил у преподавателя, он сказал, что это делается с помощью конструктора и деструктора, как я понял, с помощью деструктора можно сделать удаление объекта, то есть данные присвоенные его параметрам, это я пытался сделать, а вот зачем делать свой конструктор так и не понял, для начала, я просто оставил в конструкторе и деструктора cout'ы, чтобы понять, в какой момент они вызываются программой, узнал, что в деструктора можно использовать функцию delete для того, что мне вроде как надо, а вот с конструктором я так и не разобрался, поэтому собирался оставить как есть
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
27.04.2022, 08:38
Цитата Сообщение от QYQYA Посмотреть сообщение
но я не заметил в вашем коде деструктора
Он просто сделал как я написал. Убрал из кода указатели - они тут не нужны - и деструктор соответственно тоже не понадобился.

Цитата Сообщение от QYQYA Посмотреть сообщение
без указателей там 40 ошибок
Это не относится к делу. Ошибки не из-за того, что "без указателей".

Цитата Сообщение от QYQYA Посмотреть сообщение
без указателей там 40 ошибок, а деструктор нужен, чтобы удалить данные объекта класса
В данном коде он не нужен. Не надо высасывать из пальца.
Если у вас задание на деструктор сделайте адекватное выделение ресурса в конструкторе, а затем освобождение его в деструкторе. Какая у вас предметная область в задании? Как звучит текст задания?

Цитата Сообщение от QYQYA Посмотреть сообщение
с помощью деструктора можно сделать удаление объекта
С помощью деструктора в первую очередь делают освобождение ресурсов.

Цитата Сообщение от QYQYA Посмотреть сообщение
а вот зачем делать свой конструктор так и не понял
Конструктор нужен чтобы выделить или захватить ресурс, который вы потом будете освобождать в деструкторе.

Цитата Сообщение от QYQYA Посмотреть сообщение
а вот с конструктором я так и не разобрался, поэтому собирался оставить как есть
Надо разобраться. Как правило одно без другого не работает.
1
0 / 0 / 0
Регистрация: 24.09.2021
Сообщений: 52
27.04.2022, 10:27  [ТС]
ну, я и сам понимал, что указатели не не нужны были, до того момента пока не начал делать деструктор, простое удаление, например: "delete[] Street;" в области деструктора, который в классе, это не проходило, поэтому начал искать как работает деструктор, на сайте (https://www.google.com/amp/s/w... ors-c/amp/), на котором я смотрел, были указатели

само задание: "Построить описание класса, содержащего информацию о почтовом адресе организации. Предугадать возможность раздельного конфигурации составных частей адреса, сотворения и ликвидирования объектов этого класса."

сейчас у меня появилась ещё одна идея, попробую реализовать
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
27.04.2022, 10:31
Цитата Сообщение от QYQYA Посмотреть сообщение
простое удаление, например: "delete[] Street;" в области деструктора, который в классе, это не проходило
Потому что это вы можете делать только в том случае, если до этого ресурс (память, объект) были созданы с помощью new. А просто так, от балды - нельзя.

Добавлено через 2 минуты
QYQYA, вообще, судя по всему класс "Организация" вам вообще трогать не надо.
Вам надо сделать другой класс, например "Справочник", в котором разместить список из объектов класса "Организация". Вот в этом классе вам и нужен будет деструктор, чтобы объекты из списка удалить.
1
0 / 0 / 0
Регистрация: 24.09.2021
Сообщений: 52
27.04.2022, 10:39  [ТС]
получается мне нужно сделать ещё один класс с заранее заготовленными объектами? но в задании написано реализовать создание объектов, как я понял, это означает, что программа во время работы должна сама создавать объекты с нуля, а потом пользователь должен заполнять его параметры, вот только нельзя такое сделать, программа не может работать на коде, которого ещё нет, поэтому я сделал такое переписывание параметров одного уже существующего объекта, я подумал, что можно сделать так: человек вводит данные уже в существующий объект, потом эти самые данные выводятся на экран, потом деструктор стирает их, и дальше человек якобы уже вводит данные в другой объект, но по факту в тот же самый, только пустой уже
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
27.04.2022, 10:42
Цитата Сообщение от QYQYA Посмотреть сообщение
ещё один класс с заранее заготовленными объектами?
Почему с "заранее"? Я такого не говорил.

Цитата Сообщение от QYQYA Посмотреть сообщение
задании написано реализовать создание объектов, как я понял, это означает, что программа во время работы должна сама создавать объекты
Вот ваша программа и будет заполнять "справочник", создавать их и помещать туда. Можете считать, что это у вас база данных такая.

Добавлено через 51 секунду
Цитата Сообщение от QYQYA Посмотреть сообщение
вот только нельзя такое сделать
Почему это нельзя?
Вы на своих занятиях списки проходили?
0
0 / 0 / 0
Регистрация: 24.09.2021
Сообщений: 52
27.04.2022, 10:51  [ТС]
я не понимаю как такое сделать, разве что использовать что-то типо template'а, но я всё ещё не представляю как такое сделать

какие списки?

у нас перед классами были функции, перед функциями массивы, я загуглил, что такое эти списки, и да, мы такого не проходили

Добавлено через 6 минут
ещё забыл упомянуть структуры, были перед функциями после массивов
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
27.04.2022, 10:57
QYQYA, т.е. вы только язык учите, алгоритмы и структуры данных нет? Очень странно, так не должно быть.
Значит придется вам этим заниматься самостоятельно, если конечно хотите программированием потом на жизнь зарабатывать.

Если от вас требуют в задании
Цитата Сообщение от QYQYA Посмотреть сообщение
реализовать создание объектов ... во время работы программы
То вам просто по-любому нужна какая-то структура данных для их хранения. Либо динамический массив, либо список.
1
0 / 0 / 0
Регистрация: 24.09.2021
Сообщений: 52
27.04.2022, 11:05  [ТС]
ну, я собственно, и подумал о таком, возможно удастся реализовать в конструкторе "хранилище", в него уже перемещать
введение данные и через деструктор чистить это самое "хранилище"

но всё ещё не понимаю как сделать создание объектов,

я посмотрел немного на списки, как я понял , это есть какая-то база данных, у неё есть свои функции для заполнения, удаления и подобного, но может ли она работать в классе?
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
27.04.2022, 12:06
Лучший ответ Сообщение было отмечено QYQYA как решение

Решение

QYQYA, перекомпоновал немного ваш код. Почти ничего по сути не менял, чтобы он был для вас узнаваем.
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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
#include <iostream>
#include <string>
#include <vector>
 
using namespace std;
 
class Organization
{
public:
    Organization(string street, string house, string loc, string area, string reg, string zip)
        : Street(street), HouseNumber(house), Location(loc), Area(area), Region(reg), ZIPCode(zip)
    { }
    Organization() = default;
 
    //............
 
    std::string Street;
    std::string HouseNumber;
    std::string Location;
    std::string Area;
    std::string Region;
    std::string ZIPCode;
};
 
void Result(Organization const& org)
{
    cout
        << "Street name: " << org.Street << '\n'
        << "House number: " << org.HouseNumber << '\n'
        << "Location: " << org.Location << '\n'
        << "Area: " << org.Area << '\n'
        << "Region: " << org.Region << '\n'
        << "ZIP Code: " << org.ZIPCode << '\n'
        << "-----------------------" << endl;
}
 
class Catalog
{
public:
    Catalog() = default;
 
    Catalog(Catalog const& other)
    {
        for(Organization* org : other.Orgs)
        {
            Orgs.push_back(new Organization(*org));
        }
    }
 
    Catalog& operator=(Catalog const&) = delete;
 
    void addOrganization(Organization const& org)
    {
        Orgs.push_back(new Organization(org));
    }
 
    Organization* last()
    {
        if(!Orgs.empty())
            return Orgs.back();
        return nullptr;
    }
 
    ~Catalog()
    {
        for(Organization* org : Orgs)
        {
            delete org;
        }
    }
 
    void show() const
    {
        for(Organization const* org : Orgs)
        {
            Result(*org);
        }
    }
 
private:
    std::vector<Organization*> Orgs;
};
 
void SmthElse(Catalog& catalog);
void StartAddingObj(Catalog& catalog);
void WDYWTC(Catalog& catalog);
 
void Check(Catalog& catalog)
{
    char check{};
    cout << "Are you sure? [Y/N]" << endl;
    do
    {
        cin >> check;
    } while (check != 'Y' && check != 'N');
 
    if (check == 'Y')
    {
        cout << "Ok" << endl;
    }
    else if (check == 'N')
    {
        WDYWTC(catalog);
    }
    SmthElse(catalog);
}
 
void WDYWTC(Catalog& catalog)
{
    Organization* org = catalog.last();
    if(!org)
        return;
 
    cout << "What do you want to change?" << endl;
    std::string change;
    getline(cin, change);
 
    if (change == "Street name" || change == "street name" || change == "street")
    {
        cout << "Enter street name again: ";
        getline(cin, org->Street);
    }
    else if (change == "House number" || change == "house number" || change == "house" || change == "housenumber")
    {
        cout << "Enter house number again: ";
        getline(cin, org->HouseNumber);
    }
    else if (change == "Location" || change == "location")
    {
        cout << "Enter location again: ";
        getline(cin, org->Location);
    }
    else if (change == "Area" || change == "area")
    {
        cout << "Enter area again: ";
        getline(cin, org->Area);
    }
    else if (change == "Region" || change == "region")
    {
        cout << "Enter region again: ";
        getline(cin, org->Region);
    }
    else if (change == "ZIP Code" || change == "ZIP code" || change == "zip code"
          || change == "zip Code" || change == "code" || change == "zip" || change == "zipcode")
    {
        cout << "Enter ZIP Code again: ";
        getline(cin, org->ZIPCode);
    }
}
 
void SmthElse(Catalog& catalog)
{
    cout << "Something else? [Y/N]" << endl;
    char check{};
    do
    {
        cin >> check;
    } while (check != 'Y' && check != 'N');
 
    if (check == 'Y')
    {
        StartAddingObj(catalog);
    }
    else if (check == 'N')
    {
        cout << "Ok" << endl;
    }
}
 
void StartAddingObj(Catalog& catalog)
{
    cout << "Do you want to create new Organization's post address? [Y/N]" << endl;
 
    char check{};
    do
    {
        cin >> check;
    }
    while (check != 'Y' && check != 'N');
    if (check == 'N')
    {
        cout << "Ok" << endl;
    }
    else if (check == 'Y')
    {
        Organization NewOrganization;
 
        cout << "Enter street name: ";  cin >> NewOrganization.Street;   cout << endl;
        cout << "Enter house number: "; cin >> NewOrganization.HouseNumber; cout << endl;
        cout << "Enter location: ";     cin >> NewOrganization.Location; cout << endl;
        cout << "Enter area: ";         cin >> NewOrganization.Area;     cout << endl;
        cout << "Enter region: ";       cin >> NewOrganization.Region;   cout << endl;
        cout << "Enter ZIP Code: ";     cin >> NewOrganization.ZIPCode;  cout << endl;
 
        catalog.addOrganization(NewOrganization);
        Check(catalog);
    }
}
 
int main()
{
    Catalog catalog;
 
    StartAddingObj(catalog);
 
    catalog.show();
}
Добавлено через 5 минут
Парочка ключевых замечаний:
1) В классе не нужно смешивать ответственности. Ввод\вывод данных - это одно, а функциональность класса - другое. В данном случае Организация - это всего лишь запись в Каталоге, общение в пользователем - это не ее работа. Поэтому все интерактивные функции ввода-вывода сделаны внешними.

2) Все, что здесь сделано - сделано для моей (чтобы я не потратил больше 10 минут на ваш код) и вашей (чтобы вы хоть что-то в нем узнали свое) простоты. Изучайте что я поменял. Можно ли тут еще что-то улучшить? Конечно да. Но тогда мы как минимум опять придем к тому, что в коде будут не нужны деструкторы
1
0 / 0 / 0
Регистрация: 24.09.2021
Сообщений: 52
27.04.2022, 13:09  [ТС]
ваш код слишком хорош, подскажите что делает двоеточие здесь
Цитата Сообщение от DrOffset Посмотреть сообщение
for(Organization* org : other.Orgs)
и скобки здесь
Цитата Сообщение от DrOffset Посмотреть сообщение
char check{};
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
27.04.2022, 13:13
Цитата Сообщение от QYQYA Посмотреть сообщение
и скобки здесь
Инициализация нулем.

Цитата Сообщение от QYQYA Посмотреть сообщение
ваш код слишком хорош, подскажите что делает двоеточие здесь
Это форма цикла for.
Обозначает итерацию от начала и до конца последовательности:
Code
1
for(очередной_элемент_последовательности : последовательность)
Подробнее здесь: https://en.cppreference.com/w/... /range-for
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.04.2022, 13:13
Помогаю со студенческими работами здесь

Разработать класс Airplane (самолет). Определить конструктор и деструктор. Реализовать объявленные методы доступа к данным.
решите пожалуйста вот эту задачу, вроде бы простая.. и если можно объясните, что где что значит. (С++) Разработать класс Airplane...

Реализовать в классе по 3 конструктора с разными вариантами инициализации и один деструктор
Во всех заданиях реализовать в классе по 3 конструктора с разными вариантами инициализации и один деструктор Как это сделать. Не могу...

Как реализовать деструктор в данном коде?
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,...

Не получается реализовать
Всем доброе время суток прошу помощи есть скрипт js выполняет функцию показ скрытых блоков &lt;script...

Не получается реализовать
Дана целочисленная квадратная матрица. Определить: 1) сумму элементов в тех строках, которые не содержат отрицательных элементовж ...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
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