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

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

15.05.2017, 20:07. Показов 8571. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Мной был написан код, в котором создаётся класс и заполняются массивы. Для объединения бы использован третий массив с заранее известным размером, т.е. суммой размеров двух складываемых массивов. Но преподаватель не оценил такого подхода и потребовал перегрузить оператор +, и объединять таким образом. Была мысль сделать опять же дополнительный массив, в который будут последовательно складываться два массива, но это не решает проблему размера этого третьего (объединённого) массива. Прикрепляю код ниже. Буду очень признателен, если кто-то поможет правильно перегрузить оператор. Я очень плохо разбираюсь в классах и не знаю, как его перегрузить для объектов класса
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
#include <iostream>
#include <conio.h>
#include <locale>
using namespace std;
 
class Cset {
public:
    Cset(int i);
    ~Cset();
    /*Cset operator+(Cset& S){
        Cset S(obj1.getCount() + obj2.getCount());
 
    }*/
 
    void setArr() {
        for (int i = 0; i < count; i++) {
            cout << "Введите значение " << i + 1 << ": "; 
            cin >> arr[i];
        }
        cout << "Объект класса Cset создан!" << endl; 
    }
    void showArr() {
        for (int i = 0; i < count; i++) {
            cout << "Элемент " << i+1 << ": " << arr[i] << endl;
            //arr[i] = 0;
        }
    }
    int getCount() {
        //cout << "Count: " << count << endl;
        return count;
    }
    void setCont(int a) {
        count = a;
    }
    int *getArr() {
        return arr;
    }
 
    void objUnion(Cset& obj1, Cset& obj2) {
        int *obj1arr = obj1.getArr();
        int *obj2arr = obj2.getArr();
        int i = 0;
 
        for (i; i < obj1.getCount(); i++) {
            arr[i] = obj1arr[i];
        }
 
        for (i; i < obj1.getCount() + obj2.getCount(); i++) {
            arr[i] = obj2arr[i-obj1.getCount()];
        }
        //delete obj1arr;
        //delete obj2arr;
    }
 
    //friend const Cset& operator+(Cset& obj1, Cset& obj2);
 
private: //Переменные класса
    int count; //Количество
    int *arr; //массив значений
};
 
Cset::Cset(int arrCount) { //Конструктор класса
    //cout << "Конструктор Cset" << endl;    
    count = arrCount;
    arr = new int[arrCount];
}
 
Cset::~Cset() { //Деструктор класса
    //cout << "Деструктор Cset" << endl;
    if (arr) 
        delete arr;
}
 
int main(int argc, char* argv[]) {
    int count;
    int n;
 
    setlocale(LC_ALL,"rus"); //Использование Русских символов
 
    cout << "----------------" << endl;
    cout << "| Программа №2 |" << endl;
    cout << "----------------" << endl;
    cout << "Введите количестов значений для первого объекта: ";
    cin >> count;
    Cset obj1(count); //Создаю экземпляр класса
    obj1.setArr(); //Инициализация массива значений
    /*cout << "Количестов элементов для суммы/произведения: ";
    cin >> n;
    cout << "Сумма " << n << " элементов: " << obj1[n] << endl; //Использую перегруженный оператор [] 
    cout << "Произведение " << n << " элементов: " <<  obj1(n) << endl; //Использую перегруженный оператор () */
    cout << "Введите количестов значений для второго объекта: ";
    cin >> count;
    Cset obj2(count); //Создаю экземпляр класса
    obj2.setArr(); //Инициализация массива значений
    /*cout << "Количестов элементов для суммы/произведения: ";
    cin >> n;
    cout << "Сумма " << n << " элементов: " << obj2[2] << endl; //Использую перегруженный оператор [] 
    cout << "Произведение " << n << " элементов: " <<  obj2(2) << endl; //Использую перегруженный оператор () */
    
    Cset obj3(obj1.getCount() + obj2.getCount());
    obj3.objUnion(obj1, obj2);
    
    //system("pause");
    obj3.showArr();
 
    system("pause");
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.05.2017, 20:07
Ответы с готовыми решениями:

Перегрузка оператора сравнения (==) для массивов
Имеется класс-массив. Нужно сравнить два массива при помощи перегрузки оператора (==) Помогите написать пожалуйста!!! class array ...

Перегрузка оператора сложения. (Сложение массивов)
Задание целиком: /* Создать класс Динамический массив. Класс должен содержать • конструкторы (по количеству элементов, по...

Перегрузка оператора + (объединение одномерных массивов)
Доброго времени суток. Написала программку по заданию, но к сожалению возникает ошибка error C2955: 'Array' : use of class template...

3
284 / 232 / 114
Регистрация: 07.09.2016
Сообщений: 584
15.05.2017, 20:16
сам оператор сделать легко, но у вас в классе нет конструктора копирования и оператора =.
без них корректно все работать не будет. и не только оператор +. поэтому делать их надо по любому.
если вы их сделаете и поменяете сигнатуру у функции объединения так,
чтобы она принимала константные ссылки, то оператор делается в два счета:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Cset {
...
void objUnion(const Cset& obj1, const Cset& obj2) { без изменений}
...
};
 
const Cset operator+(const Cset& obj1, const Cset& obj2)
{
  // просто скопировал то, что у вас уже было.
  Cset obj3(obj1.getCount() + obj2.getCount());
  obj3.objUnion(obj1, obj2);
  return obj3;
}
 
 
// Где-то в коде:
Cset objSum = obj1 + obj2;
objSum.showArr();
1
0 / 0 / 0
Регистрация: 19.11.2016
Сообщений: 4
16.05.2017, 00:09  [ТС]
Спасибо)
0
0 / 0 / 0
Регистрация: 19.05.2020
Сообщений: 8
10.04.2021, 16:52
а можно весь код программы пожалуйста?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.04.2021, 16:52
Помогаю со студенческими работами здесь

Перегрузка оператора плюс, объединение двух массивов
class Array { private: int size; unsigned int* data; public: Array(){} Array(int asize) { size=asize; ...

Написать программу для объединения массивов
Написать программу для объединения массивов, n - количество массивов, подлежащих объединению, а - массив указателей на массивы, подлежащих...

Перегрузка оператора << для шаблона
У меня есть структура студенты, а класс-шаблон массив элементов. Как сделать оператор универсальным, подходящим для любых типов(и для...

Перегрузка оператора += и = для очереди
Доброе утро! += - сложение очередей, а = присваивание. Просто мне нужно перегрузить -, а получается значит и = тоже. Вот код. Пробую...

Перегрузка оператора + для стека
Добрый день. Прошу помощи с перегрузкой этой операции. Цель: перегрузить + так,чтобы он складывал элементы двух стеков в третий.Вроде...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru