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

Перегрузка operator+ для массивов

09.03.2014, 16:46. Показов 2278. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Мне надо решить следующую задачу: сложить два массива в один, используя перегрузку операторов(перегрузить operator+).
У меня есть заголовочный файл с необходимыми данными и функцией, .cpp-файл реализацией функции и файл main.cpp
В чем вся проблема: я складываю эти массивы, но складываю их во временную переменную, которая исчезает после выполнения функции и в итоге ничего не складывается. Как это можно обойти?


procedures.h
C++ (Qt)
1
2
3
4
5
6
7
8
#ifndef PROCEDURES
#define PROCEDURES
struct mas{
    int *a;
    int count;
};
mas& operator+ (const mas& x, const mas& y);
#endif
procedures.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
#include "procedures.h" 
mas& operator+ (const mas& x, const mas& y){
    mas z;
    z.a = new int (x.count+y.count);
    for (int i=0;i<x.count;i++)
        z.a[i] = x.a[i];
    for (int i=x.count;i<y.count;i++)
        z.a[i] = y.a[i];    
    return z;
}
main.cpp
C++ (Qt)
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
#include "procedures.h"
#include <stdio.h>
void main(){
    mas mas1,mas2,mas3;
    mas2.count = 25;
    mas3.count = 50;
    mas1.count = mas2.count+mas3.count;
    mas1.a = new int[mas1.count];
    mas2.a = new int[mas2.count];
    mas3.a = new int[mas3.count];
    for (int i=0; i<mas1.count;i++)
        mas1.a[i]=0;
    for (int i=0; i<mas2.count;i++)
        mas2.a[i]=i;
    for (int i=0; i<mas3.count;i++)
        mas3.a[i]=i;
 
    mas1 = mas2 + mas3;
 
    for (int i=0; i<mas1.count;i++)
        printf("%0.0f",mas1.a[i]);
    system( "pause" );
    delete mas1.a;
    delete mas2.a;
    delete mas3.a;
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.03.2014, 16:46
Ответы с готовыми решениями:

Перегрузка operator= для очереди
Надо присвоить очереди i2 значения i, не пойму, вообще правильно ли делаю? template&lt;class T&gt; queue&lt;T&gt;&amp;...

Перегрузка operator* для векторов
Подскажите пожалуйста, как перегрузить * − умножение векторов (a*b для всех i)?

Перегрузка operator<< для шаблонного класса
Добрый день не могу понять как реализовать перегрузку &lt;&lt; для шаблонного класса template &lt;class T&gt; class List { ...

5
 Аватар для igorrr37
2883 / 2030 / 992
Регистрация: 21.12.2010
Сообщений: 3,782
Записей в блоге: 9
09.03.2014, 19:20
Лучший ответ Сообщение было отмечено Острослав как решение

Решение

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
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <stdexcept>
 
class mas
{
public:
    mas() : a(0), cnt(0){}
    mas(int const cnt_)
    {
        a = new int[cnt_];
        for(int i = 0; i < cnt_; ++i)
            a[i] = 0;
        cnt = cnt_;
    }
    mas(mas const& rhs)
    {
        a = new int[rhs.cnt];
        for(int i = 0; i < rhs.cnt; ++i)
            a[i] = rhs.a[i];
        cnt = rhs.cnt;
    }
    mas& operator=(mas rhs)
    {
        a = rhs.a;
        cnt = rhs.cnt;
        rhs.a = 0;
        return *this;
    }
    mas operator+ (const mas& rhs) const
    {
        mas tmp(cnt + rhs.cnt);
        tmp.cnt = cnt + rhs.cnt;
        int i = 0;
        for(i = 0; i < cnt; ++i)
            tmp.a[i] = a[i];
        for(int j = 0; j < rhs.cnt; ++j, ++i)
            tmp.a[i] = rhs.a[j];
        return tmp;
    }
    int& operator[](int const ind)
    {
        if(ind >= cnt)
            throw std::runtime_error("wrong index");
        return a[ind];
    }
    int cntr() const
    {
        return cnt;
    }
    ~mas()
    {
        delete[] a;
        a = 0;
        cnt = 0;
    }
private:
    int *a;
    int cnt;
};
 
int main()
{
 
    mas mas1, mas2(3), mas3(5);
    for (int i = 0; i < mas2.cntr(); i++)
        mas2[i] = 3;
    for (int i = 0; i < mas3.cntr(); i++)
        mas3[i] = 4;
 
    mas1 = mas2 + mas3;
 
    for (int i=0; i < mas1.cntr();i++)
        printf("%d\n", mas1[i]);
    system( "pause" );
    return 0;
}
1
0 / 0 / 0
Регистрация: 17.03.2013
Сообщений: 37
09.03.2014, 19:45  [ТС]
C++ (Qt)
1
mas() : a(0), cnt(0){}
а что это значит?

Добавлено через 7 минут
Цитата Сообщение от igorrr37 Посмотреть сообщение
mas() : a(0), cnt(0){}
а что это значит?
0
 Аватар для igorrr37
2883 / 2030 / 992
Регистрация: 21.12.2010
Сообщений: 3,782
Записей в блоге: 9
09.03.2014, 19:52
это конструктор записывает в а ноль и в cnt ноль
1
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
09.03.2014, 19:57
C++
1
"%0.0f"
А это что значит?
procedures.cpp - 4-я строка - должны быть прямоугольные скобки. Ты выделяешь массив.
Там же, между 3-й и 4-й строками вставь:
C++
1
z.count = x.count+y.count;
Иначе чему будет равен размер возвращаемого массива?
0
0 / 0 / 0
Регистрация: 17.03.2013
Сообщений: 37
09.03.2014, 20:25  [ТС]
Цитата Сообщение от igorrr37 Посмотреть сообщение
mas(mas const& rhs)
* * {
* * * * a = new int[rhs.cnt];
* * * * for(int i = 0; i < rhs.cnt; ++i)
* * * * * * a[i] = rhs.a[i];
* * * * cnt = rhs.cnt;
* * }
а когда вызывается этот конструктор?тут?
Цитата Сообщение от igorrr37 Посмотреть сообщение
mas mas1, mas2(3), mas3(5);
Добавлено через 5 минут
Цитата Сообщение от castaway Посмотреть сообщение
C++ (Qt)
1
"%0.0f"
А это что значит?
упс, не правильный формат вывода
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.03.2014, 20:25
Помогаю со студенческими работами здесь

перегрузка оператора operator< для сортировки
Никак не могу понять почему он не может отсортировать map (строка 123) правильно. operator&lt; на строке 60 #include...

Перегрузка operator+ для класса Set
template&lt;class T&gt; Set&lt;T&gt; Set&lt;T&gt;::operator+(T) { int a; int i; for (i = 0; i &lt; size; i++) a = array; delete array; ...

Перегрузка operator+ для класса Шар
Нужна помощь в решении задачки на языке С++, тема перегрузка операций. Буду рад помощи! Задание формулируется так. Создать класс...

Перегрузка operator<< для пользовательского типа
Переписал пример из учебника, но компилятор (visual 2017) выдает кучу ошибок. Добавлять прототип пергрузки в класс пробовал, но не...

Перегрузка operator>> для производного класса
Базовый класс: Taxi_Car.h: #pragma once #include&lt;string&gt; using namespace std; class Taxi_Car { string Marka;


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
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
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru