0 / 0 / 0
Регистрация: 12.02.2020
Сообщений: 12
1

Перегрузка операторов сложения, вычитания и умножения для объектов класса

08.10.2020, 10:35. Показов 1936. Ответов 11
Метки c++ (Все метки)

Author24 — интернет-сервис помощи студентам
Есть класс тестовых вопросов. Объявляются 3 объекта этого класса. В 1 объект записывается первый блок вопросов значения записываются в 1 массив, во 2 - второй блок вопросов записывается во 2 массив, а в 3 объект записывается результат операций над объектами.
Как вообще можно реализовать операцию слияния, вычитания и умножения именно для объектов класса ?
Сравнение идет по названию вопроса.
Должно быть что-то вроде если идет операция сложения, то в 3 объект класса записываются все значения первого массива+ значения 2 массива,которых нет в первом.
Если идет операция вычитания, то в 3 объект записываются все значения первого массива которых нет во 2.

Вот код, кто сможет помочь с этим огромное спасибо.
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
#include <iostream>
struct card 
{
    char quest[512];
    char fst[512];
    char scd[512];
    char thd[512];
    char foh[512];
    char fth[512];
    int num;
    int balls;
};
 
struct card M[30];
struct card S[30];
struct card tmp;
int i, j, n, k;
using namespace std;
 
 
class Test : public card
{
public:
    void otch(card* M, int& N)
    {
 
 
        
        cout << '\n';
        int c = 1;
 
        for (int i = 0; i < N; i++) {
            cout << c << "-ыйВопрос : " << M[i].quest << endl;
            cout << "1-ый вариант ответа: " << M[i].fst << endl;
            cout << "2-ый вариант ответа: " << M[i].scd << endl;
            cout << "3-ый вариант ответа: " << M[i].thd << endl;
            cout << "4-ый вариант ответа: " << M[i].foh << endl;
            cout << "5-ый вариант ответа: " << M[i].fth << endl;
            cout << "Правильный Ответ: " << M[i].num << endl;
            c++;
        }
 
 
        cout << '\n';
        system("pause");
 
 
    }
 
 
 
    void add(card* M, int& N)
    {
        system("CLS");
        int c = 1;
 
        for (int i = 0; i < N; i++)
        {
            cout << "Введите данные о " << c << " вопросе. \n";
            cout << "Вопрос\n";
            while (*M[i].quest == 0) {
                cin.getline(M[i].quest, 512);
            }
            cout << "1 вариант ответа\n";
            cin.getline(M[i].fst, 512);
            cout << "2 вариант ответа\n";
            cin.getline(M[i].scd, 512);
            cout << "3 вариант ответа\n";
            cin.getline(M[i].thd, 512);
            cout << "4 вариант ответа\n";
            cin.getline(M[i].foh, 512);
            cout << "5 вариант ответа\n";
            cin.getline(M[i].fth, 512);
            cout << "Номер правильного ответа\n";
            cin >> M[i].num;
            cin.get();
            cout << endl;
            c++;
        }
        cout << "Введено максимальное кол-во записей.\n";
        system("pause");
        system("CLS");
    }
 
 
 
};
 
 
 
 
 
 
int main()
{
    setlocale(LC_ALL, "");
 
 
    Test p1;
    Test p2;
    Test p3;
 
 
    int N, K,v;
    cout << "Введите размер Теста 1 :\n";
    cin >> N;
    cout << "Введите размер Теста 2 :\n";
    cin >> K;
    system("CLS");
 
 
    p1.add(M, N);
    p2.add(S, K);
    system("CLS");
 
 
    cout << "Первый Тест: \n";
    p1.otch(M, N);
    system("CLS");
    cout << "Второй Тест: \n";
    p1.otch(S, K);
    system("CLS");
 
 
    for (;;)
    {
        
        printf("\n[1 - слияние двух тестовых наборов]");
        printf("\n[2 - разность двух тестовых наборов]");
        printf("\n[3 - пересечение двух тестовых наборов]");
        printf("\n[0 - Exit]");
        printf("\nВыберите номер в меню:");
        std::cin >> v;
        switch (v)
        {
        case 1:
            break;
        case 2:
            break;
        case 3:
            break;
        case 0:exit(1);
        default:
            cout << "Выберите существующий пункт меню." << endl;
            system("pause");
            break;
        }
    }
    system("pause");
 
    system("PAUSE");
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.10.2020, 10:35
Ответы с готовыми решениями:

Перегрузка операторов сложения, вычитания и умножения двух векторов
Помогите пожалуйста. Мне надо сделать перегрузку сложения двух векторов, вычитания дух векторов,...

Определите для класса Rational операторы сложения, вычитания, умножения и деления
Определите для класса Rational операторы сложения, вычитания, умножения и деления, так чтобы...

Перегрузка операций сложения/умножения вычитания 16-ричных чисел
Выполнить перезагрузку перечисленных операций, закрепив за ними соответствующий функциональный...

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

11
E=m*c^2
160 / 47 / 10
Регистрация: 04.02.2019
Сообщений: 263
Записей в блоге: 5
08.10.2020, 12:24 2
Упрости вопрос. Ты выложил весь код, мало кто захочет разбираться подробно в столь мало значительной задаче да ещё и так подробно.
0
0 / 0 / 0
Регистрация: 12.02.2020
Сообщений: 12
10.10.2020, 17:10  [ТС] 3
Ну суть в целом такая: как перегрузить оператор сложения для объектов класса.
0
E=m*c^2
160 / 47 / 10
Регистрация: 04.02.2019
Сообщений: 263
Записей в блоге: 5
10.10.2020, 17:40 4
Цитата Сообщение от sakata Посмотреть сообщение
Ну суть в целом такая: как перегрузить оператор сложения для объектов класса.
ты действительно не понимаешь что такой подход не продуктивен? если ты будешь задавать вопросы таким образом то очень сомнительно что ктото захочет дать тебе совет.
0
6139 / 3483 / 1417
Регистрация: 07.02.2019
Сообщений: 8,869
10.10.2020, 17:51 5
Цитата Сообщение от sakata Посмотреть сообщение
Как вообще можно реализовать операцию слияния, вычитания и умножения именно для объектов класса ?
Насколько я понял, речь идет об объединении, разности и пересечении множеств.
Эти функции реализованы в стандартной библиотеке, если проблема с алгоритмом, можете "подглядеть" реализацию:
set_difference
set_intersection
set_union
0
E=m*c^2
160 / 47 / 10
Регистрация: 04.02.2019
Сообщений: 263
Записей в блоге: 5
10.10.2020, 18:29 6
опиши проблему в четких ясных понятиях.

примет:
операция сложения должна получать две строки и возвращать третью содержащие первые самостоятельно выделяя память для нее.
0
0 / 0 / 0
Регистрация: 12.02.2020
Сообщений: 12
10.10.2020, 19:38  [ТС] 7
операция сложения объектов должна получать значения полей (quest, fst, scd, thd, foh, fth,num) соответствующих массивов M и S.
Сравнивать значения полей (quest) и записывать в 3 объект класса Test (p3) все значения полей (quest, fst, scd, thd, foh, fth,num) первого Массива (M)+ значения полей (quest, fst, scd, thd, foh, fth,num) второго массива (S),которых нет в первом.

По другому объяснить не смогу (
0
E=m*c^2
160 / 47 / 10
Регистрация: 04.02.2019
Сообщений: 263
Записей в блоге: 5
11.10.2020, 12:05 8
Цитата Сообщение от sakata Посмотреть сообщение
По другому объяснить не смогу (
Надо себя заставить. и это не стеб, пока ты самому себе не можешь объяснить, пока ты не можешь произнести задачу вслух ты и сам не сможешь решить и никто другой не сможет тебе помочь.
0
0 / 0 / 0
Регистрация: 12.02.2020
Сообщений: 12
15.10.2020, 01:10  [ТС] 9
Тогда есть вопрос можно ли запустить метод в перегрузке оператора если да, то как именно.

Пробую различные варианты, но пока что безрезультатно.
void minus(card* H, int& N,int K)
{
count = 0;
int c = 0;
schet = 0;
for (int i = 0; i < N; ++i)
{
for (int j = 0; j < K; ++j)
{
char s1[512];
char s2[512];

strcpy(s1, M[i].quest);
string str(s1);

strcpy(s2, S[j].quest);
string str1(s2);
if (str==str1)
{
count++;


}
}
if (count ==0)
{

strcpy(H[c].quest, M[i].quest);
strcpy(H[c].fst, M[i].fst);
strcpy(H[c].scd, M[i].scd);
strcpy(H[c].thd, M[i].thd);
strcpy(H[c].foh, M[i].foh);
strcpy(H[c].fth, M[i].fth);
H[c].num = M[i].num;
schet++;
c++;
}
count = 0;
}
}




Test operator+(Test& p3)
{
return Test(p3.minus(H, N, K));
}
Миниатюры
Перегрузка операторов сложения, вычитания и умножения для объектов класса  
0
21 / 17 / 5
Регистрация: 05.09.2020
Сообщений: 162
15.10.2020, 01:36 10
sakata, А зачем использовать метод? И зачем Test(...), если просто:
C++
1
2
p3.minus(...);
return p3;
P.S. Лучше использовать выделение кода...
0
0 / 0 / 0
Регистрация: 12.02.2020
Сообщений: 12
15.10.2020, 11:41  [ТС] 11
macced, При перегрузке оператора + (для объектов класса) должен выполниться метод minus, или как-то перенести в перегрузку код этого метода.

P.S. да, точн забыл выделить код.
0
21 / 17 / 5
Регистрация: 05.09.2020
Сообщений: 162
15.10.2020, 15:31 12
Не понимаю в чем заключается проблема?
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
#include <iostream>
 
using namespace std;
 
class Vect {
public:
    int x, y, z;
    
    Vect(int a, int b, int c) {
        x = a;
        y = b;
        z = c;
    }
    
    Vect operator+(Vect& obj) {
        //x, y, z - значения левого класса
        //obj - правый
        return Vect(x - obj.x, y - obj.y, z - obj.z);
    }
};
 
int main(int argc, char *argv[])
{
    Vect a(5, 5, 5);
    Vect b(3, 3, 3);
    Vect n = a + b;
    cout << n.x << n.y << n.z;
}
А если нужно метод вызвать в классе (допустим add):
C++
1
2
3
4
5
void add() {
    x++;
    y++;
    z++;
}
То в функции перег. оператора:
add() - будет вызвана функция левого
obj.add() - вызов функции в правом
0
15.10.2020, 15:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.10.2020, 15:31
Помогаю со студенческими работами здесь

Для класса "Рациональная дробь" перегрузить операторы сложения, вычитания, умножения и деления
Добрый вечер уважаемые участники форума. Прошу вас пожалуйста помочь с моим заданием....

Описать класс "Многочлен" и перегрузку операций для этого класса — сложения, умножения, вычитания
Доброго времени суток)) Как можно описать класс &quot;Многочлен&quot; ну и перегрузку операций для этого...

Отладить функцию для сложения, вычитания, умножения и деления двух чисел
Не могу найти ошибок,программа не правильно работает. Вот условие : Напишите программу, которая...

Класс для выполнения операций сложения, вычитания и умножения комплексных чисел
Условие: Составить описание класса для представления комплексных чисел. Обеспечить выполнение...

[intel8051] Реализовать подпрограммы на ассемблере для сложения, вычитания, умножения 32 разрядных чисел
Реализовать три подпрограммы (вызываемые с помощью команды call), принимающие в качестве аргументов...

Написать программу для сложения, вычитания, умножения и вычисления определителя трёхмерной матрицы.
Задача на сложение матриц REM Моделир.сложных трёхмерных (2 строки * 3 столбца* * 2 слоя) матриц...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru