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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.75
dzrkot
zzzZZZ...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 1,997
#1

Перегрузка операции + для сложения элементов динамического массива - C++

21.09.2013, 01:08. Просмотров 2447. Ответов 8
Метки нет (Все метки)

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

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iomanip>
using namespace std;
class DateArray
{
    friend ostream &operator<<(ostream &, const DateArray &);
    friend istream &operator>>(istream &, DateArray &);
    public:
        DateArray(int);
        ~DateArray();
     //   DateArray operator+(DateArray); // это инициализация функции оператора+
        void print();
        void setArray();
    int m;
    int *a;
    private:
    int s;
    static int counterArray;
};
 
#endif // DATEARRAY_H
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
#include "DateArray.h"
#include <iostream>
#include <stdlib.h>
#include <iomanip>
 
using namespace std;
int DateArray::counterArray=0;
//////////////////////// перегрузка операторов
 
//сама функция описывающая это
/*DateArray &operator+(DateArray &value)  // должно быть (DateArray &value1,DateArray &value2) по идее
{
    for (int i=0;i<value.m;i++)
    {
    // ?????
    }
    // return ????
}*/
 
 
ostream &operator<<(ostream &output,const DateArray &coutDateArray)
{
    output<<"Cout for Array "<<coutDateArray.s<<endl;
    for (int i=0;i<coutDateArray.m;i++)
    output<<coutDateArray.a[i]<<endl;
    return output;
}
 
istream &operator>>(istream &input, DateArray &cinDateArray)
{
    for (int i=0;i<cinDateArray.m;i++)
    input>>cinDateArray.a[i];
}
//////////////////////// КОНСТУКТОР ///////////////////////
DateArray::DateArray(int x)
:m(x)
{
a = new int[m];
counterArray++;
s = counterArray;
}
 
////////////////////////  ФУНКЦИИ   ///////////////////////
 
 
void DateArray::print()
{
cout<<"\nArray "<<s<<endl;
for (int i=0;i<m;i++)
cout<<i+1<<") "<<a[i]<<endl;
}
 
 
void DateArray::setArray()
{
    for (int i=0;i<m;i++)
       a[i]=rand()%99;
}
 
 
////////////////////////  ДЕСТРУКТОР   ///////////////////////
DateArray::~DateArray()
{
    delete []a;
}
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
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include "DateArray.h"
using namespace std;
 
int main()
{
    int x;
    srand(time(0));
    cout<<"Enter line array"<<endl;
    cin>>x;
 
    DateArray myDateArray1(x);
    DateArray myDateArray2(x);
    DateArray myDateArray3(x);
    myDateArray1.setArray();
    myDateArray2.setArray();
 
    cin>>myDateArray3;
 
    cout<<myDateArray1<<endl;
    cout<<myDateArray2<<endl;
    cout<<myDateArray3<<endl;
 
    return 0;
Добавлено через 47 минут
=((
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.09.2013, 01:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка операции + для сложения элементов динамического массива (C++):

Перегрузка операции сложения в классе - C++
#include &lt;iostream&gt; #include &lt;string&gt; #include &lt;iomanip&gt; using namespace std; class Project { private: int id; ...

Перегрузка операции присваивания и сложения - C++
Необходимо составить описание класса для определения одномерных массивов целых чисел. Границы индексов можно задавать произвольно, т.е....

Выбор структуры для операции сложения попарных элементов при N=10^6 - C++
Доброго дня!Подскажите пожалуйста, есть множество элементов от 1 до N.(где N=10^6). Мне нужно выполнить суммирование 1-ого элемента со...

Перегрузка "оператора +" для сложения массива объектов - C++
Как перегрузить правильно оператор+ в данном случае или так делать нельзя? Ещё как-то туда надо передать размеры этого массива... и как...

Цикл для сложения элементов целочисленного массива - C++
помогите написать цикл для сложения элементов целочисленного массива, типа a^1+b^2+c^3+...+k^n. при этом все элементы массива могут быть...

Метод-член класса для создания одномерного массива из отрицательных элементов двумерного динамического массива - C++
Помогите, пожалуйста, нужно разработать метод-член класса для создания одномерного массива из отрицательных элементов двумерного...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
fridi
-8 / 40 / 1
Регистрация: 21.09.2009
Сообщений: 145
21.09.2013, 01:18 #2
//Вот пример
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Test
{
     
    public:
 
    Test(const Test &); // т.к у тебя память выделяется динамически этот конструктор нужен.
                                   // + незабывай проверять на this(Прис. самому себе)
 
    void operator+(Test &);
 
    protected:
    int a[20];
 
};
 
void Test::operator+(Test &t)
{
    for(int i = 0; i < 20; i++)
    {
        a[i] = t.a[i];
    }
}
p.s Прочитай про конструктор копирования, он тебе нужен тоже хотя к задаче не относится.
Fyret
184 / 170 / 13
Регистрация: 30.07.2013
Сообщений: 359
21.09.2013, 01:22 #3

Не по теме:

А шо эта гениальная функция делает? Ну даже с учетом того, что это просто пример?

C++
1
2
3
4
5
6
7
void Test::operator+(Test &t)
{
    for(int i = 0; i < 20; i++)
    {
        a[i] = t.a[i];
    }
}



Конструктор копирования тут нужен и это относится к задаче.
dzrkot
zzzZZZ...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 1,997
21.09.2013, 01:25  [ТС] #4
Цитата Сообщение от Fyret Посмотреть сообщение

Не по теме:

А шо эта гениальная функция делает? Ну даже с учетом того, что это просто пример?

C++
1
2
3
4
5
6
7
void Test::operator+(Test &t)
{
    for(int i = 0; i < 20; i++)
    {
        a[i] = t.a[i];
    }
}



Конструктор копирования тут нужен и это относится к задаче.
понял в каком направлении копать...
Да просто придумал себе задачу, написал класс который рандомом заполнял динамический массив, потом стал читать книжку дальше, дошёл до перегрузки операций, стал применять это к той функции, считай что обработка данных каких либо... Вообще я хочу соединить AVR контроллер по rs232 с компом и написать прогу для обработки данных, это просто для обучения, вот соответственно это к данной задаче применимо..надеюсь))
fridi
-8 / 40 / 1
Регистрация: 21.09.2009
Сообщений: 145
21.09.2013, 01:32 #5
А шо эта гениальная функция делает? Ну даже с учетом того, что это просто пример?
заполняет рандомом массив элемнтов...
Конструктор копирования тут нужен и это относится к задаче.
да может пример покажете?...кроме присваивания, которое выше по коду не используется?
Fyret
184 / 170 / 13
Регистрация: 30.07.2013
Сообщений: 359
21.09.2013, 02:01 #6
Цитата Сообщение от fridi Посмотреть сообщение
заполняет рандомом массив элемнтов...
Да? А я вижу, что оператор сложения мало того, что ничего не возвращает, так еще и реализует оператор присваивания.

Цитата Сообщение от fridi Посмотреть сообщение
да может пример покажете?...кроме присваивания, которое выше по коду не используется?
Легко. Вот ТС хочет написать оператор сложения для класса с динамически выделяемыми членами-данными. Очевидно, сигнатура этого оператора выглядит так:
C++
1
DateArray operator+( const DateArray& ) const;
Опаньки! Из функции возвращается объект! Еще раз: функция создает в своей области видимости объект класса DateArray и возвращает его. А это означает, что за пределами области видимости оператора это временный объект, и если есть планы по его дальнейшему использованию, то либо им надо инициализировать, либо его скопировать в другой объект этого же класса. И тут никак не обойтись без конструктора копирования и оператора присваивания. Причем, с учетом динамически выделяемых членов-данных, эти методы надо делать самому, не доверяя компилятору.
fridi
-8 / 40 / 1
Регистрация: 21.09.2009
Сообщений: 145
21.09.2013, 02:24 #7
Да? А я вижу, что оператор сложения мало того, что ничего не возвращает, так еще и реализует оператор присваивания.
Причем, с учетом динамически выделяемых членов-данных, эти методы надо делать самому, не доверяя компилятору.
прошу вас Продолжайте!!1
p.s

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
27
28
29
30
31
32
33
34
35
class Test
{
     
    public:
    Test();
 
    Test(const Test &); // т.к у тебя память выделяется динамически этот конструктор нужен.
                                   // + незабывай проверять на this(Прис. самому себе)
    void SetRandom();
 
    void operator+(Test &);
 
    protected:
    int a[20];
 
};
 
void Test::operator+(Test &t)
{
    for(int i = 0; i < 20; i++)
    {
        a[i] = t.a[i];
    }
}
 
void Test::SetRandom()
{
    for(int i = 0; i < 20; i++)
        a[i] = i;
}
 
Test::Test()
{
 
}
Test::Test(const Test &)
{

}

Test t;
Test b;
b.SetRandom();
t+b; // о чудо! в t Окажется то что в b.a! Оператор присваивание нот детектед!
[/CPPQT]
Fyret
184 / 170 / 13
Регистрация: 30.07.2013
Сообщений: 359
21.09.2013, 02:32 #8
Цитата Сообщение от fridi Посмотреть сообщение
прошу вас Продолжайте!!1
Я стараюсь, но боюсь уже шишку себе набить фейспалмом.

Цитата Сообщение от fridi Посмотреть сообщение
о чудо! в t Окажется то что в b.a! Оператор присваивание нот детектед!
Это ли не чудо? Вызываем оператор сложения, а в итоге содержимое второго операнда оказывается в первом. Ну конечно, это не присваивание.
fridi
-8 / 40 / 1
Регистрация: 21.09.2009
Сообщений: 145
21.09.2013, 02:44 #9
Да? А я вижу, что оператор сложения мало того, что ничего не возвращает, так еще и реализует оператор присваивания.
Вызываем оператор сложения, а в итоге содержимое второго операнда оказывается в первом. Ну конечно, это не присваивание.
не ужели? сами себе противоречите? я думал вызывается оператор деления!!11 вам надо не шишку набивать, а взять 3 издание Страуструпа!11 и читать читать читать во имя добра!1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.09.2013, 02:44
Привет! Вот еще темы с ответами:

Перегрузка сложения для двумерных матриц - C++
Имеется класс для работы с матрицами размера 3 на 3: class Matrix{ private: int aMas ; public: Matrix(){} void...

Перегрузка оператора +, для сложения координат 2х векторов - C++
Задание: разработать абстрактный тип данных &quot;Вектор&quot;. АТД должен обеспечивать : ввод\вывод векторов,сложение\вычитание,перемножение на...

Перегрузка оператора + для сложения двух экземпляров класса - C++
#include &quot;stdafx.h&quot; #include &quot;conio.h&quot; #include &lt;iostream&gt; #include &lt;clocale&gt; using namespace::std; class str_type{ char...

Сколько памяти необходимо для динамического хранения массива из 5 элементов - C++
Сколько памяти необходимо для динамического хранения массива из 5 элементов, каждый из которых занимает 7 байт памяти, в 64-х разрядной ОС?...


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

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

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