Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
0 / 0 / 1
Регистрация: 05.07.2013
Сообщений: 2
1

Перегрузка оператора плюс, объединение двух массивов

09.12.2013, 00:27. Показов 3826. Ответов 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
class Array
{
private:
    int size; 
    unsigned  int* data;
public:
    Array(){}
    Array(int asize) {
        size=asize;
        data=new int[size];
        if(data) cout<<"Massiv inicializir\n";
        else cout<<"ne hvatka pamiati\n";
    }
    ~Array(){
        delete[] data;
        cout<<"Object uni4tojen\n";
        }
void fill_random(); // Инициализировать случайными числами
void print(); // Вывести на экран
void scan(); // Ввод с клавиатуры
Array operator+(Array&); // МЕТОД В КОТОРОМ НУЖНА ПОМОЩЬ
};
Array Array::operator+(Array& ob){
Array tmp;
 return tmp;
  
}
 
 
int main()
{
clrscr();
    Array first(10);
    Array second(5);
    first.fill_random();
    second.fill_random();
    first.print();
    second.print();
    Array third(15);
    third=first+second;
    third.print();
    getch();
            return 0;
}
по логике мне нужно взять размер двух массивов прибавить
и добавлять в конец первого массива, пока не дойду до их суммы


но вот как получить значения объекта first.size second.size в перегрузке( не знаю как правильно сказать) вообщем :
C++
1
Array Array::operator+(Array& ob){ здесь нужно получить first.size second.size }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.12.2013, 00:27
Ответы с готовыми решениями:

Перегрузка оператора + (объединение одномерных массивов)
Доброго времени суток. Написала программку по заданию, но к сожалению возникает ошибка error...

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

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

Перегрузка оператора сложения. (Сложение массивов)
Задание целиком: /* Создать класс Динамический массив. Класс должен содержать • конструкторы...

2
All rights reserved.
92 / 82 / 24
Регистрация: 03.08.2013
Сообщений: 258
09.12.2013, 00:42 2
Присваивание перегрузить забыли?
Размер получаете через this->ob для второго объекта, а размер первого можете просто получить стандартным способом, обратившись к переменной, хранящей его. Затем то же самое проделываете для оператора присваивания.

Добавлено через 5 минут
Возвращаемый тип при сложении будет Array&, а в теле пишите return this.
1
0 / 0 / 1
Регистрация: 05.07.2013
Сообщений: 2
17.12.2013, 01:32  [ТС] 3
Цитата Сообщение от StackOverflow Посмотреть сообщение
Возвращаемый тип при сложении будет Array&, а в теле пишите return this.
C++
1
2
3
4
5
Array Array::operator=(Array& ob){
this->size=size;
this->data=data;
 return this; // ругается Could  not find a match for 'Array::Array(Array * const)'
}
а так при странной пляске с бубном получил,
C++
1
2
3
4
5
6
7
Array Array::operator+(Array& ob){
    this->size=size;
    Array tmp(size+ob.size);
        for(i=0;i<size;i++) tmp.data[i]=*(data+i);
        for(i=size;i<size+ob.size;i++) tmp.data[i]=ob.data[i-size];
    return tmp;
}
при вызове в теле
C++
1
2
3
4
//присваиваем нач значения first(10) и second(5)
Array third(15);
    third=first+second;
    third.print();
Получаю:
(число непонятное), (число непонятное), мои числа в нужном порядке,
а вот где деваются два первых числа понятия не имею, не подскажете?

Добавлено через 1 час 44 минуты
Всё получилось:
Створити клас для роботи з одновимірними динамічними масивами значень типу unsigned int. Передбачити функції - компоненти класу для виконання таких операцій:
+ динамічного присвоєння;
+ об’єднання двох масивів у один (конкатенація);
+ упорядкування масиву по збільшенню та по зменшенню;
+ консольне введення та виведення масиву.
- поелементного складання та віднімання;
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
  
 #include <string.h>
#include <iostream.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
         int i=0;
class Array
{
private:
    int size;
   unsigned int* data;
public:
// конструктор
    Array(){}
    Array(int asize) {
        size=asize;
        data=(unsigned int*)new int[size];
        if(data) cout<<"Massiv inicializir\n";
        else cout<<"ne hvatka pamiati\n";
    }
    void ERRMEM();
    Array(const Array &);
    Array operator+(Array&);
    // деструктор
    ~Array(){
        delete[] data;
        cout<<"Object uni4tojen\n";
        }
        //Далее методы
    void fill_random(); // Инициализировать случайными числами
    void print(); // Вывести на экран
    void scan(); // Ввод с клавиатуры
    void sortv();// упорядочить масив по "zbilshenu"
    void sortn();
        
};
Array::Array(const Array &ob)   //Определение конструктора //копирования
{                           
 size=ob.size;
 data=(unsigned int*)new int [size];
 if(!data) ERRMEM();
 for(int i=0;i<ob.size;i++)
  data[i]=ob.data[i];
}
void Array::ERRMEM()
{
 cout<<"Ошибка выделения памяти"<<endl;
 exit(1);
}
 
 
void Array::sortv(){
   unsigned int tmp, i, j, pos;
    for(i = 0; i < size; ++i) // i - номер текущего шага
    { 
        pos = i; 
        tmp = data[i];
        for(j = i + 1; j < size; ++j) // цикл выбора наименьшего элемента
        {
            if (data[j] < tmp) 
            {
               pos = j; 
               tmp = data[j]; 
            }
        }
        data[pos] = data[i]; 
        data[i] = tmp; // меняем местами наименьший с a[i]
    }
}
void Array::sortn(){
   unsigned int tmp, i, j, pos;
    for(i = 0; i < size; ++i) // i - номер текущего шага
    { 
        pos = i; 
        tmp = data[i];
        for(j = i + 1; j < size; ++j) // цикл выбора наименьшего элемента
        {
            if (data[j] > tmp) 
            {
               pos = j; 
               tmp = data[j]; 
            }
        }
        data[pos] = data[i]; 
        data[i] = tmp; // меняем местами наименьший с a[i]
    }
}
        // Динамическое присвоение
void Array::fill_random()
{
            randomize();
    for(i=0;i<size;i++){
                *(data+i)=random(100); //рандомные числа от 0 до 100
    }
    }
//консольне введення
    void Array::print(){
        for(i=0;i<size;i++){
        cout<<*(data+i)<<" ";
        }
        cout<<endl;
    }
    // та виведення масиву.
    void Array::scan(){
    cout<<"Vvedite massiv iz:"<<size<<"simvolov \n";
        for(int i=0;i<size;i++){
        cin>>*(data+i);
        }
    //cout<<endl;
    }
Array Array::operator+(Array& ob){
    this->size=size;
    Array tmp(size+ob.size);
    for(i=0;i<size;i++) 
    {
        tmp.data[i]=*(data+i);//this->data[i]=data[i];
    }
    for(i=size;i<size+ob.size;i++) tmp.data[i]=ob.data[i-size];
 return tmp;
}
 
int main()
{
clrscr();
    Array first(10);
    Array second(5);
    first.fill_random();
    second.scan();
    first.print();
    second.print();
    second.sortv();
    cout<<"POsle sortv"<<endl;
    second.print();
    first.sortn();
    first.print();
    Array third(15);
    third=first+second;
    third.print();
getch();
 return 0;
}
может кто посоветует по улучшению кода.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.12.2013, 01:32

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Перегрузка оператора == для двух векторов
помогите написать перегрузку оператора == для 2 векторов.

Объединение двух массивов в один с чередованием элементов исходных массивов
Сила, и направление ветра на горном плато регистрируются один раз в день по очереди двумя...

Объединение двух массивов в один с чередованием элементов исходных массивов.
Вариант 4 (упр 1 и 2)Помогите написать ребят! в частности не получается написать 2 задачу с...

Выполнить объединение двух строк с помощью перегрузки оператора (*)
#define _CRT_SECURE_NO_WARNINGS #include&lt;iostream&gt; #include&lt;string&gt; using namespace std; class...

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

Объединение двух массивов
Допустим есть два массива users и seasons. В массиве users значения id_users пользователя...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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