Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Острослав
0 / 0 / 0
Регистрация: 17.03.2013
Сообщений: 37
09.03.2014, 16:46     Перегрузка operator+ для массивов #1
Здравствуйте. Мне надо решить следующую задачу: сложить два массива в один, используя перегрузку операторов(перегрузить 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;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.03.2014, 16:46     Перегрузка operator+ для массивов
Посмотрите здесь:

C++ Перегрузка operator+
перегрузка operator= для очереди C++
[C++] перегрузка operator<< для шаблонного класса C++
Перегрузка operator= C++
C++ перегрузка operator[][][]
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
09.03.2014, 19:20     Перегрузка operator+ для массивов #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
#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;
}
Острослав
0 / 0 / 0
Регистрация: 17.03.2013
Сообщений: 37
09.03.2014, 19:45  [ТС]     Перегрузка operator+ для массивов #3
C++ (Qt)
1
mas() : a(0), cnt(0){}
а что это значит?

Добавлено через 7 минут
Цитата Сообщение от igorrr37 Посмотреть сообщение
mas() : a(0), cnt(0){}
а что это значит?
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
09.03.2014, 19:52     Перегрузка operator+ для массивов #4
это конструктор записывает в а ноль и в cnt ноль
castaway
Эксперт С++
4842 / 2981 / 367
Регистрация: 10.11.2010
Сообщений: 11,013
Записей в блоге: 10
Завершенные тесты: 1
09.03.2014, 19:57     Перегрузка operator+ для массивов #5
C++
1
"%0.0f"
А это что значит?
procedures.cpp - 4-я строка - должны быть прямоугольные скобки. Ты выделяешь массив.
Там же, между 3-й и 4-й строками вставь:
C++
1
z.count = x.count+y.count;
Иначе чему будет равен размер возвращаемого массива?
Острослав
0 / 0 / 0
Регистрация: 17.03.2013
Сообщений: 37
09.03.2014, 20:25  [ТС]     Перегрузка operator+ для массивов #6
Цитата Сообщение от 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"
А это что значит?
упс, не правильный формат вывода
Yandex
Объявления
09.03.2014, 20:25     Перегрузка operator+ для массивов
Ответ Создать тему
Опции темы

Текущее время: 16:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru