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

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

09.03.2014, 16:46. Показов 2241. Ответов 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
2870 / 2017 / 991
Регистрация: 21.12.2010
Сообщений: 3,734
Записей в блоге: 8
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
2870 / 2017 / 991
Регистрация: 21.12.2010
Сообщений: 3,734
Записей в блоге: 8
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
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru