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

Шаблоны класса

06.06.2019, 23:23. Показов 593. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Не могли бы вы помочь сделать 10й пункт меню, там должен выполняться шаблон(198-216 строка) из заголовочного файла set.h.
В общем программа считает объем тора и производит операции со множествами, в 10м пункте меню она должна показать равны между собой множетсва или нет.

set.h
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
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
#include <iostream>
using namespace std;
//Объявление класса "Множество":
template <class T>
class set {
private:
    T *ptr;
    int max_size;
    int count;
public:
    //Конструкторы:
    set(int maxim);
    set(const set &x);
 
    //Деструктор:
    ~set();
 
    void add(T x);              //добавление эл-та в множество
    void del(T x);              //удаление эл-та из множества
    bool check_in(T x);         //проверка вхождения эл-та в множество
    void output();              //Вывод множества на экран
    void find(double f) {       //Поиск длины окружности
        bool flag = true;
        for (int i = 1; i <= count; i++) {
            if (abs((ptr[i].getVol() - f) / ptr[i].getVol()) < 0.00001) {
                cout << "\t" << ptr[i] << "\n";
                flag = false;
            }
        }
        if (flag)
            cout << "\nНичего не найдено";
    }
    set operator=(const set&);  //перегрузка: операции присваивания
    set operator*(const set&);  //перегрузка: пересечение двух множеств
    set operator+(const set&);  //перегрузка: объединение двух множеств
    set operator-(const set&);  //перегрузка: разность двух множеств
    friend bool operator== (set <T> s1, set <T> s2);//операция: сравнение двух множеств
};
template <class T>
void set<T> ::add(T x)//удаление
{
    if (count < max_size)
    {
        if (!check_in(x))
        {
            count += 1;
            ptr[count] = x;
            cout << "Добавление прошло успешно";
        }
        else
            cout << "Добавление невозможно (Такой э-т уже есть в множестве)";
    }
    else
        cout << "Добавление невозможно (Множество полно)";
}
 
 
template <class T>
void set <T>::del(T x)//удаление
{
    bool ok;
    ok = false;
    if (count != 0)
    {
        for (int i = 1; i <= count; i++)
        {
            if (ptr[i] == x)
            {
                for (int j = i; j <= count; j++)
                {
                    ptr[j] = ptr[j++];
                }
                count -= 1;
                ok = true;
            }
        }
        if (ok)
            cout << "Удаление прошло успешно";
    }
    else
        cout << "Удаление невозможно";
}
 
 
template <class T>
bool set <T>::check_in(T x)
{
    for (int i = 1; i <= count; i++)
        if (ptr[i] == x)
            return true;
    return false;
}
 
 
 
template <class T>
void set<T>::output()
{
    if (count == 0)
    {
        cout << "{}";
        return;
    }
    cout << "{";
    if (count > 1) {
        cout << ptr[1];
        for (int i = 2; i <= count; i++)
            cout << ", " << ptr[i];
    }
    else {
        for (int i = 1; i <= count; i++)
            cout << ptr[i];
    }
    cout << "}";
}
 
 
 
template <class T>
set<T> set<T>::operator*(const set<T>& s2)//пересечение
{
    set <T> s3(max_size * 2);
    s3.count = 0;
    for (int i = 1; i <= count; i++)
        for (int j = 1; j <= s2.count; j++) {
            if (s2.ptr[j] == ptr[i])
            {
                s3.count += 1;
                s3.ptr[s3.count] = ptr[i];
            }
        }
    return s3;
}
 
 
template <class T>
set<T> set<T>::operator+(const set<T>& s2) //объединение множеств
{
    bool in;
    set <T> s3(max_size * 2);
    s3.count = 0;
    for (int i = 1; i <= count; i++)
    {
        s3.count += 1;
        s3.ptr[s3.count] = ptr[i];
    }
    for (int i = 1; i <= s2.count; i++)
    {
        in = s3.check_in(s2.ptr[i]);
 
        if (!in)
        {
            s3.count += 1;
            s3.ptr[s3.count] = s2.ptr[i];
        }
    }
    return s3;
}
template <class T>
//разность
set<T> set<T>::operator-(const set<T>& s2)
{
    set <T> s3(max_size);
    s3.count = 0;
    bool flag;
    for (int i = 1; i <= count; i++) {
        flag = true;
        for (int j = 1; j <= s2.count; j++) {
            if (ptr[i] == s2.ptr[j]) {
                flag = false;
            }
        }
        if (flag) {
            s3.count += 1;
            s3.ptr[s3.count] = ptr[i];
        }
    }
    return s3;
}
 
template<class T> // отв за создание 4го элемента
set<T> set<T>::operator=(const set<T>& s) {
    if (&s == this)     //сравнение адресов (проверка на присваивание сам себя)
        return *this;
    if (ptr) delete[] ptr;
    max_size = s.max_size;
    if (s.ptr) {
        ptr = new T[max_size + 1];
        for (int i = 1; i <= max_size; i++) {
            ptr[i] = s.ptr[i];
        }
    }
    count = s.count;
    return *this;
}
 
template <class T>
bool operator==(set <T> s1, set <T> s2)
{
    bool ok;
    if (s1.count != s2.count)
        return false;
 
    for (int i = 1; i <= s1.count; i++) {
        ok = false;
        for (int j = 1; j <= s2.count; j++) {
            if (ptr[i] == ptr[j])
                ok = true;
            break;
        }
        if (ok == false)
            return false;
    }
    return true;
}
 
 
 
template <class T>
set<T>::set(int maxim)
{
    ptr = new T[maxim + 1];
    T p;
    max_size = maxim;
    count = 0;
}
 
 
template <class T>
set<T>::set(const set &x)//заполнение массива значениями
{
    max_size = x.max_size;
    count = x.count;
    ptr = new T[max_size + 1];
    for (int i = 1; i <= max_size; i++)
        ptr[i] = x.ptr[i];
}
 
 
template <class T>
set<T>::~set()
{
    delete[]ptr;
}
thor.h
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
#include <iostream>
#include <math.h>
using namespace std;
 
class Thor {
    double R, r, h;
public:
    Thor(double = .0, double = .0, double = .0);                    // конструктор с умолчанием
    void setValue(double, double, double);                  // установка данных
    double getr() { return r; }                                // получение внутрннего радиуса
    double getR() { return R; }                                // получение внешнего радиуса
    double getH() { return h; };
 
    double getVol() { return (3.14159265*3.14159265 * 2 * (r - h)*(R - r - 2 * h)*(R - r - 2 * h)); }          //объем тора V=π2*2r*(R-r)2 
    friend istream& operator >> (istream & stream, Thor &ob);
    friend ostream& operator<<(ostream & stream, Thor &ob);
    friend bool operator==(Thor &, Thor &);
    Thor& operator=(const Thor& ob)                              //перегрузка =
    {
        if (this == &ob)                                        //проверяем на присвоения к себе
            return *this;
        r = ob.r;
        R = ob.R;
        h = ob.h;
        return *this;
    }
};
bool operator==(Thor &a, Thor &b)
{
    return (a.r == b.r && a.R == b.R && a.h == b.h);
}
//Функции-элемента класса Thor
Thor::Thor(double a, double b, double c) {
    setValue(a, b, c);
}
void Thor::setValue(double RR, double rr, double HH) {
    R = RR;
    r = rr;
    h = HH;
}
//дружественная функция – перегруженная операция вставки в поток 
ostream& operator<<(ostream & stream, Thor &ob) {
    stream << " R= " << ob.R << " r= " << ob.r << " толщина тора = " << ob.getH() << " объем тора =" << ob.getVol() << "" << endl;
    return stream;
}
 
//дружественная функция – перегруженная операция извлечения из потока
istream& operator >> (istream & stream, Thor &ob) {
    stream >> ob.R >> ob.r >> ob.h;
    return stream;
}
sourse.cpp
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
#include <iostream>
#include "conio.h"
#include <math.h>
#include <string.h>
#include "thor.h"
#include "set.h"
 
using namespace std;
 
void menu() {
    char n;
    char choose;
    bool flag = true;
    int max = 3;
    set <Thor> set1(max);
    set <Thor> set2(max);
    set <Thor> set3(max * 2);
    Thor x;
 
    do {
        cout << '\n'
            << "\n\n Меню работы над множествами "
            << "\n1. Добавление элемента"
            << "\n2. Удаление элемента"
            << "\n3. Проверка на наличие"
            << "\n4. Присвоение одного множества другому"
            << "\n5. Пересечение"
            << "\n6. Объединение"
            << "\n7. Разность"
            << "\n8. Вывод на экран"
            << "\n9. Поиск по объему (только для типа Thor)"
            << "\n0. Выход"
            << "\n\nВведите : ";
        cin >> n;
        switch (n)
        {
 
        case '1':cout << "Выберете множество для добавления (1 или 2) : ";
            cin >> choose;
            cout << "Введите э-т : ";
            cin >> x;
            if (choose == '1')
                set1.add(x);
            if (choose == '2')
                set2.add(x);
            break;
        case '2':cout << "Выберете множество для удаления (1 или 2) : ";
            cin >> choose;
            cout << "Введите величину элемента : ";
            cin >> x;
            if (choose == '1')
                set1.del(x);
 
            if (choose == '2')
                set2.del(x);
            break;
        case '3':cout << "Выберете множество для проверки(1 или 2) : ";
            cin >> choose;
            cout << "Введите величину элемента : ";
            cin >> x;
            if (choose == '1')
            {
                if (set1.check_in(x))
                    cout << "Элемент содержится в данном множестве";
                else
                    cout << "Элемент не содержится в данном множестве";
            }
            if (choose == '2')
            {
                if (set2.check_in(x))
                    cout << "Элемент содержится в данном множестве";
                else
                    cout << "Элемент не содержится в данном множестве";
            }
            break;
        case '4':cout << "Выберете в какое множество копировать (1 или 2) : ";
            cin >> choose;
            if (choose == '1')
                set1 = set2;
            if (choose == '2')
                set2 = set1;
            break;
        case '5':set3 = set1*set2;
            cout << "Результат записан в 3е множество";
            break;
        case '6':set3 = set1 + set2;
            cout << "Результат записан в 3е множество";
            break;
        case '7':cout << "Выберете вычитаемое (1 - из второго первое /2 - из первого второе) : ";
            cin >> choose;
            if (choose == '1')
                set3 = set1 - set2;
            if (choose == '2')
                set3 = set2 - set1;
            cout << "Результат записан в 3е множество";
            break;
        case '8':cout << "Выберите множество для вывода (1 или 2 или 3) : ";
            cin >> choose;
            if (choose == '1')
                set1.output();
            if (choose == '2')
                set2.output();
            if (choose == '3')
                set3.output();
            break;
        case '9':double f;
            cout << "Введите объем : ";
            cin >> f;
            cout << "Выберите множество для поиска(1 или 2 или 3) : ";
            cin >> choose;
            if (choose == '1')
                set1.find(f);
            if (choose == '2')
                set2.find(f);
            if (choose == '3')
                set3.find(f);
            break;
        case '10':cout << "Проверка равентсва сетов"
 
            
 
 
 
 
 
 
 
            break;
        case '0':return;
        default:cout << "Действие не выбрано";
        }
    } while (true);
}
void main()
{
    setlocale(LC_CTYPE, "Russian");
    menu();
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.06.2019, 23:23
Ответы с готовыми решениями:

Шаблоны класса, очередь
Есть задание: Определите шаблон QueueTp. Проверьте его, создав очередь указателей на Worker. Вот что есть: worker.h #ifndef WORKER_H_ ...

Шаблоны методов класса
Здравствуйте, подскажите, можно ли в С++ сделать шаблон отдельного метода класса ? т.е. нужно что-то типа подобного: class MyClass ...

Не разбиваются шаблоны класса на файлы
Всем привет. Изучаю С++, всегда разбивал свои программы на файлы и радовался, но тут начал изучать шаблоны классов, и ничего не выходит,...

5
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
06.06.2019, 23:47
Цитата Сообщение от Dedy111ka Посмотреть сообщение
Здравствуйте! Не могли бы вы помочь сделать 10й пункт меню, там должен выполняться шаблон(198-216 строка) из заголовочного файла set.h.
Для начала сделай ссылки
C++
1
2
3
template <class T>
bool operator==(const set<T> &s1, const set<T> &s2)
{
Добавлено через 1 минуту
C++
1
2
3
4
5
6
     case '10':
             if (set1 == set2)
                      std::cout << "Равны" << std::endl;
             else
                     std::cout << "Не равны" << std::endl;
            break;
Добавлено через 1 минуту
C++
1
2
3
            << "\n9. Поиск по объему (только для типа Thor)"
            << "\n10. Проверка равенства сетов"
<< "\n0. Выход"
Добавлено через 3 минуты
Ну и оператор, наверное, лучше сделать не внешний, а в классе
C++
1
2
3
4
5
6
7
    set operator-(const set&);  //перегрузка: разность двух множеств
    bool operator== (const set &s2) const
   {
..........................................
 
   }
};
Добавлено через 11 минут
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
case '10':
* * * * * * *if (set1 == set2)
Да уж

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
int n;
        cin >> n;
        switch (n)
        {
         case 1:
.......................
         case 10:
0
0 / 0 / 0
Регистрация: 20.02.2019
Сообщений: 131
07.06.2019, 00:12  [ТС]
Выдаёт ошибку

Добавлено через 2 минуты
error LNK2019:unresolved external symbol “bool _cdecl operator==
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
07.06.2019, 09:07
Цитата Сообщение от Dedy111ka Посмотреть сообщение
Выдаёт ошибку
Покажи код
0
0 / 0 / 0
Регистрация: 20.02.2019
Сообщений: 131
07.06.2019, 22:55  [ТС]
set.h
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
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
#include <iostream>
using namespace std;
//Объявление класса "Множество":
template <class T>
class set {
private:
    T *ptr;
    int max_size;
    int count;
public:
    //Конструкторы:
    set(int maxim);
    set(const set &x);
 
    //Деструктор:
    ~set();
 
    void add(T x);              //добавление эл-та в множество
    void del(T x);              //удаление эл-та из множества
    bool check_in(T x);         //проверка вхождения эл-та в множество
    void output();              //Вывод множества на экран
    void find(double f) {       //Поиск длины окружности
        bool flag = true;
        for (int i = 1; i <= count; i++) {
            if (abs((ptr[i].getVol() - f) / ptr[i].getVol()) < 0.00001) {
                cout << "\t" << ptr[i] << "\n";
                flag = false;
            }
        }
        if (flag)
            cout << "\nНичего не найдено";
    }
    set operator=(const set&);  //перегрузка: операции присваивания
    set operator*(const set&);  //перегрузка: пересечение двух множеств
    set operator+(const set&);  //перегрузка: объединение двух множеств
    set operator-(const set&);  //перегрузка: разность двух множеств
    friend bool operator== (set <T> s1, set <T> s2);//операция: сравнение двух множеств
};
template <class T>
void set<T> ::add(T x)//удаление
{
    if (count < max_size)
    {
        if (!check_in(x))
        {
            count += 1;
            ptr[count] = x;
            cout << "Добавление прошло успешно";
        }
        else
            cout << "Добавление невозможно (Такой э-т уже есть в множестве)";
    }
    else
        cout << "Добавление невозможно (Множество полно)";
}
 
 
template <class T>
void set <T>::del(T x)//удаление
{
    bool ok;
    ok = false;
    if (count != 0)
    {
        for (int i = 1; i <= count; i++)
        {
            if (ptr[i] == x)
            {
                for (int j = i; j <= count; j++)
                {
                    ptr[j] = ptr[j++];
                }
                count -= 1;
                ok = true;
            }
        }
        if (ok)
            cout << "Удаление прошло успешно";
    }
    else
        cout << "Удаление невозможно";
}
 
 
template <class T>
bool set <T>::check_in(T x)
{
    for (int i = 1; i <= count; i++)
        if (ptr[i] == x)
            return true;
    return false;
}
 
 
 
template <class T>
void set<T>::output()
{
    if (count == 0)
    {
        cout << "{}";
        return;
    }
    cout << "{";
    if (count > 1) {
        cout << ptr[1];
        for (int i = 2; i <= count; i++)
            cout << ", " << ptr[i];
    }
    else {
        for (int i = 1; i <= count; i++)
            cout << ptr[i];
    }
    cout << "}";
}
 
 
 
template <class T>
set<T> set<T>::operator*(const set<T>& s2)//пересечение
{
    set <T> s3(max_size * 2);
    s3.count = 0;
    for (int i = 1; i <= count; i++)
        for (int j = 1; j <= s2.count; j++) {
            if (s2.ptr[j] == ptr[i])
            {
                s3.count += 1;
                s3.ptr[s3.count] = ptr[i];
            }
        }
    return s3;
}
 
 
template <class T>
set<T> set<T>::operator+(const set<T>& s2) //объединение множеств
{
    bool in;
    set <T> s3(max_size * 2);
    s3.count = 0;
    for (int i = 1; i <= count; i++)
    {
        s3.count += 1;
        s3.ptr[s3.count] = ptr[i];
    }
    for (int i = 1; i <= s2.count; i++)
    {
        in = s3.check_in(s2.ptr[i]);
 
        if (!in)
        {
            s3.count += 1;
            s3.ptr[s3.count] = s2.ptr[i];
        }
    }
    return s3;
}
template <class T>
//разность
set<T> set<T>::operator-(const set<T>& s2)
{
    set <T> s3(max_size);
    s3.count = 0;
    bool flag;
    for (int i = 1; i <= count; i++) {
        flag = true;
        for (int j = 1; j <= s2.count; j++) {
            if (ptr[i] == s2.ptr[j]) {
                flag = false;
            }
        }
        if (flag) {
            s3.count += 1;
            s3.ptr[s3.count] = ptr[i];
        }
    }
    return s3;
}
 
template<class T> // отв за создание 4го элемента
set<T> set<T>::operator=(const set<T>& s) {
    if (&s == this)     //сравнение адресов (проверка на присваивание сам себя)
        return *this;
    if (ptr) delete[] ptr;
    max_size = s.max_size;
    if (s.ptr) {
        ptr = new T[max_size + 1];
        for (int i = 1; i <= max_size; i++) {
            ptr[i] = s.ptr[i];
        }
    }
    count = s.count;
    return *this;
}
 
template <class T>
bool operator==(set <T> &s1, set <T> &s2)
{
    bool ok;
    if (s1.count != s2.count)
        return false;
 
    for (int i = 1; i <= s1.count; i++) {
        ok = false;
        for (int j = 1; j <= s2.count; j++) {
            if (ptr[i] == ptr[j])
                ok = true;
            break;
        }
        if (ok == false)
            return false;
    }
    return true;
}
 
 
 
template <class T>
set<T>::set(int maxim)
{
    ptr = new T[maxim + 1];
    T p;
    max_size = maxim;
    count = 0;
}
 
 
template <class T>
set<T>::set(const set &x)//заполнение массива значениями
{
    max_size = x.max_size;
    count = x.count;
    ptr = new T[max_size + 1];
    for (int i = 1; i <= max_size; i++)
        ptr[i] = x.ptr[i];
}
 
 
template <class T>
set<T>::~set()
{
    delete[]ptr;
}
thor.h
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
#include <iostream>
#include <math.h>
using namespace std;
 
class Thor {
    double R, r, h;
public:
    Thor(double = .0, double = .0, double = .0);                    // конструктор с умолчанием
    void setValue(double, double, double);                  // установка данных
    double getr() { return r; }                                // получение внутрннего радиуса
    double getR() { return R; }                                // получение внешнего радиуса
    double getH() { return h; };
 
    double getVol() { return (3.14159265*3.14159265 * 2 * (r - h)*(R - r - 2 * h)*(R - r - 2 * h)); }          //объем тора V=π2*2r*(R-r)2 
    friend istream& operator >> (istream & stream, Thor &ob);
    friend ostream& operator<<(ostream & stream, Thor &ob);
    friend bool operator==(Thor &, Thor &);
    Thor& operator=(const Thor& ob)                              //перегрузка =
    {
        if (this == &ob)                                        //проверяем на присвоения к себе
            return *this;
        r = ob.r;
        R = ob.R;
        h = ob.h;
        return *this;
    }
};
bool operator==(Thor &a, Thor &b)
{
    return (a.r == b.r && a.R == b.R && a.h == b.h);
}
//Функции-элемента класса Thor
Thor::Thor(double a, double b, double c) {
    setValue(a, b, c);
}
void Thor::setValue(double RR, double rr, double HH) {
    R = RR;
    r = rr;
    h = HH;
}
//дружественная функция – перегруженная операция вставки в поток 
ostream& operator<<(ostream & stream, Thor &ob) {
    stream << " R= " << ob.R << " r= " << ob.r << " толщина тора = " << ob.getH() << " объем тора =" << ob.getVol() << "" << endl;
    return stream;
}
 
//дружественная функция – перегруженная операция извлечения из потока
istream& operator >> (istream & stream, Thor &ob) {
    stream >> ob.R >> ob.r >> ob.h;
    return stream;
}
main
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
#include <iostream>
#include "conio.h"
#include <math.h>
#include <string.h>
#include "thor.h"
#include "set.h"
 
using namespace std;
 
void menu() {
    int n;
    char choose;
    bool flag = true;
    int max = 3;
    set <Thor> set1(max);
    set <Thor> set2(max);
    set <Thor> set3(max * 2);
    Thor x;
 
    do {
        cout << '\n'
            << "\n\n Меню работы над множествами "
            << "\n1. Добавление элемента"
            << "\n2. Удаление элемента"
            << "\n3. Проверка на наличие"
            << "\n4. Присвоение одного множества другому"
            << "\n5. Пересечение"
            << "\n6. Объединение"
            << "\n7. Разность"
            << "\n8. Вывод на экран"
            << "\n9. Поиск по объему (только для типа Thor)"
            << "\n10. Проверка равенства сетов"
            << "\n0. Выход"
            << "\n\nВведите : ";
        cin >> n;
        switch (n)
        {
 
        case 1:cout << "Выберете множество для добавления (1 или 2) : ";
            cin >> choose;
            cout << "Введите э-т : ";
            cin >> x;
            if (choose == '1')
                set1.add(x);
            if (choose == '2')
                set2.add(x);
            break;
        case 2:cout << "Выберете множество для удаления (1 или 2) : ";
            cin >> choose;
            cout << "Введите величину элемента : ";
            cin >> x;
            if (choose == '1')
                set1.del(x);
 
            if (choose == '2')
                set2.del(x);
            break;
        case 3:cout << "Выберете множество для проверки(1 или 2) : ";
            cin >> choose;
            cout << "Введите величину элемента : ";
            cin >> x;
            if (choose == '1')
            {
                if (set1.check_in(x))
                    cout << "Элемент содержится в данном множестве";
                else
                    cout << "Элемент не содержится в данном множестве";
            }
            if (choose == '2')
            {
                if (set2.check_in(x))
                    cout << "Элемент содержится в данном множестве";
                else
                    cout << "Элемент не содержится в данном множестве";
            }
            break;
        case 4:cout << "Выберете в какое множество копировать (1 или 2) : ";
            cin >> choose;
            if (choose == '1')
                set1 = set2;
            if (choose == '2')
                set2 = set1;
            break;
        case 5:set3 = set1*set2;
            cout << "Результат записан в 3е множество";
            break;
        case 6:set3 = set1 + set2;
            cout << "Результат записан в 3е множество";
            break;
        case 7:cout << "Выберете вычитаемое (1 - из второго первое /2 - из первого второе) : ";
            cin >> choose;
            if (choose == '1')
                set3 = set1 - set2;
            if (choose == '2')
                set3 = set2 - set1;
            cout << "Результат записан в 3е множество";
            break;
        case 8:cout << "Выберите множество для вывода (1 или 2 или 3) : ";
            cin >> choose;
            if (choose == '1')
                set1.output();
            if (choose == '2')
                set2.output();
            if (choose == '3')
                set3.output();
            break;
        case 9:double f;
            cout << "Введите объем : ";
            cin >> f;
            cout << "Выберите множество для поиска(1 или 2 или 3) : ";
            cin >> choose;
            if (choose == '1')
                set1.find(f);
            if (choose == '2')
                set2.find(f);
            if (choose == '3')
                set3.find(f);
            break;
 
 
        case 10:cout << "Проверка равентсва сетов"; //////////////////////////////////////////
            if (set1 == set2)
                cout << "Равны" << endl;
            else
                cout << "Не равны" << endl;
            break;
 
 
 
        case 0:return;
        default:cout << "Действие не выбрано";
        }
    } while (true);
}
int main()
{
    setlocale(LC_CTYPE, "Russian");
    menu();
}
Добавлено через 1 минуту
oleg-m1973, кинул
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
07.06.2019, 23:02
Цитата Сообщение от Dedy111ka Посмотреть сообщение
oleg-m1973, кинул
Оператор == должен быть вот таким - friend bool operator== (const set <T> &s1, const set <T> &s2);//операция: сравнение двух множеств
Исправь в классе set, в декларации и в реализации (в двух местах!!!)
В классе Thor виду только декларацию, тоже неправильную. Наверное надо исправить и добавить реализацию
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.06.2019, 23:02
Помогаю со студенческими работами здесь

Шаблоны массива класса array (объяснить)
Здравствуйте, я не могу понять, что означает шаблон класса array..Вот само задание: &quot;13. Объявите следующие объекты данных ...

Шаблоны классов, перегрузка operator<< класса ostream
Не компилируется программа. fatal error: 1 unresolved externals Как правильно определить operator&lt;&lt; ??? #include...

Шаблоны классов: непонятная ошибка в одном из методов класса
Задача создать шаблон двоичного дерева поиска. В методе удаления узла IntelliSense выдает ошибку: ссылается на if и пишет: &quot;требуется...

Шаблоны и функторы как callback для класса свойства объекта. Код работает - но не должен
Здравствуйте! Хочу написать реализацию класса свойства на шаблоне. Т.е есть объект, он инициирует необходимые проперти, в графическом...

Шаблоны функций, Ошибка: для использования класса шаблон требуется список аргументов шаблон
Есть у меня 3 структуры Трамвай , Троллейбус , Автобус. Для автобуса определены функции (работают) Троллейбус и Трамвай одинаковые поля...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
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-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru