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

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

06.06.2019, 23:23. Показов 613. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru