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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Острослав
0 / 0 / 0
Регистрация: 17.03.2013
Сообщений: 37
#1

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

09.03.2014, 16:46. Просмотров 337. Ответов 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)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.03.2014, 16:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка operator+ для массивов (C++):

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

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

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

Перегрузка operator< для двух экземпляров класса отрезок - C++
Всем добра, в классе отрезок хочу перегрузить операцию &lt; правильно ли я сделал ? При этом отрезок с координатами x1=1 y1=1 и x2=4 y2=4...

Перегрузить operator<<() для шаблонного класса (перегрузка оператора вывода) - C++
Здравствуйте. Перегружаю оператор вывода для шаблонного класса. using namespace std; template &lt;class Element&gt; class List { ...

Class и operator[] для N мерных массивов (требуется совет от опытных) - C++
Добрый день :senor: Верно ли, что для того, чтобы получить доступ к элементу в N мерном массиве(private) достаточно лишь перегрузить...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
igorrr37
1647 / 1275 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
09.03.2014, 19:20 #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;
}
1
Острослав
0 / 0 / 0
Регистрация: 17.03.2013
Сообщений: 37
09.03.2014, 19:45  [ТС] #3
C++ (Qt)
1
mas() : a(0), cnt(0){}
а что это значит?

Добавлено через 7 минут
Цитата Сообщение от igorrr37 Посмотреть сообщение
mas() : a(0), cnt(0){}
а что это значит?
0
igorrr37
1647 / 1275 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
09.03.2014, 19:52 #4
это конструктор записывает в а ноль и в cnt ноль
1
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
09.03.2014, 19:57 #5
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  [ТС] #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"
А это что значит?
упс, не правильный формат вывода
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.03.2014, 20:25
Привет! Вот еще темы с ответами:

Перегрузка "operator =" для шаблона класса - C++
как правильно перегрузить operator= для щаблона, по идее я принимаю 2 ссылки на объекты этого класса и возвращаю 1 из них ... что-то не...

Перегрузка оператора + для объединения массивов - C++
Здравствуйте! Мной был написан код, в котором создаётся класс и заполняются массивы. Для объединения бы использован третий массив с заранее...

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

Перегрузка operator->() - C++
Всем привет! Прохожу тему дескрипторов и меня удивляет как работает перегруженный operator-&gt;(). //какой то интерфейс struct...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
09.03.2014, 20:25
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru