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

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

08.10.2020, 10:35. Показов 2075. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.10.2020, 10:35
Ответы с готовыми решениями:

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

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

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

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

примет:
операция сложения должна получать две строки и возвращать третью содержащие первые самостоятельно выделяя память для нее.
0
0 / 0 / 0
Регистрация: 12.02.2020
Сообщений: 12
10.10.2020, 19:38  [ТС]
операция сложения объектов должна получать значения полей (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
 Аватар для K_ILYA_V
160 / 47 / 10
Регистрация: 04.02.2019
Сообщений: 263
Записей в блоге: 5
11.10.2020, 12:05
Цитата Сообщение от sakata Посмотреть сообщение
По другому объяснить не смогу (
Надо себя заставить. и это не стеб, пока ты самому себе не можешь объяснить, пока ты не можешь произнести задачу вслух ты и сам не сможешь решить и никто другой не сможет тебе помочь.
0
0 / 0 / 0
Регистрация: 12.02.2020
Сообщений: 12
15.10.2020, 01:10  [ТС]
Тогда есть вопрос можно ли запустить метод в перегрузке оператора если да, то как именно.

Пробую различные варианты, но пока что безрезультатно.
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
Сообщений: 167
15.10.2020, 01:36
sakata, А зачем использовать метод? И зачем Test(...), если просто:
C++
1
2
p3.minus(...);
return p3;
P.S. Лучше использовать выделение кода...
0
0 / 0 / 0
Регистрация: 12.02.2020
Сообщений: 12
15.10.2020, 11:41  [ТС]
macced, При перегрузке оператора + (для объектов класса) должен выполниться метод minus, или как-то перенести в перегрузку код этого метода.

P.S. да, точн забыл выделить код.
0
21 / 17 / 5
Регистрация: 05.09.2020
Сообщений: 167
15.10.2020, 15:31
Не понимаю в чем заключается проблема?
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.10.2020, 15:31
Помогаю со студенческими работами здесь

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

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

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

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

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


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

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

Новые блоги и статьи
Исключения в Java: советы, примеры кода и многое другое
Javaican 18.05.2025
Исключения — это объекты, созданные когда программа сталкивается с непредвиденной ситуацией: файл не найден, сетевое соединение разорвано, деление на ноль. . . Список можно продолжать до бесконечности. . . .
Как сделать SSO (Single Sign-On) в C# приложении
stackOverflow 18.05.2025
SSO — это механизм, позволяющий пользователю пройти аутентификацию один раз и получить доступ к нескольким приложениям без повторного ввода учетных данных. Вы наверняка сталкивались с ним, когда. . .
Kubernetes с Apache Flink для обработки данных в реальном времени
Mr. Docker 17.05.2025
Kubernetes — это целая философия управления распределёнными приложениями. В отличие от "примитивных" решений вроде Docker Swarm, K8s (как его ласково называют в тусовке DevOps-инженеров) предлагает. . .
Использование декораторов в Python
py-thonny 17.05.2025
Если вы когда-нибудь задумывались о том, как красиво расширить функциональность кода без лишней возни и дублирования, декораторы в Python — та самая волшебная палочка, которую вы искали. По сути, это. . .
Реализация многопоточных сетевых серверов на Python
py-thonny 16.05.2025
Когда сталкиваешься с необходимостью писать высоконагруженные сетевые сервисы, выбор технологии имеет критическое значение. Python, со своей элегантностью и высоким уровнем абстракции, может. . .
C# и IoT: разработка Edge приложений с .NET и Azure IoT
UnmanagedCoder 16.05.2025
Мир меняется прямо на наших глазах, и интернет вещей (IoT) — один из главных катализаторов этих перемен. Если всего десять лет назад концепция "умных" устройств вызывала скептические улыбки, то. . .
Гибридные квантово-классические вычисления: Примеры оптимизации
EggHead 16.05.2025
Гибридные квантово-классические вычисления — это настоящий прорыв в подходах к решению сложнейших вычислительных задач. Представьте себе союз двух разных миров: классические компьютеры, с их. . .
Использование вебсокетов в приложениях Java с Netty
Javaican 16.05.2025
HTTP, краеугольный камень интернета, изначально был спроектирован для передачи гипертекста с минимальной интерактивностью. Его главный недостаток в контексте современных приложений — это. . .
Реализация операторов Kubernetes
Mr. Docker 16.05.2025
Концепция операторов Kubernetes зародилась в недрах компании CoreOS (позже купленной Red Hat), когда команда инженеров искала способ автоматизировать управление распределёнными базами данных в. . .
Отражение в C# и динамическое управление типами
stackOverflow 16.05.2025
Reflection API в . NET — это набор классов и интерфейсов в пространстве имён System. Reflection, который позволяет исследовать и манипулировать типами, методами, свойствами и другими элементами. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru