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

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

Восстановить пароль Регистрация
 
timqha
0 / 0 / 0
Регистрация: 05.07.2013
Сообщений: 2
09.12.2013, 00:27     Перегрузка оператора плюс, объединение двух массивов #1
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 }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2013, 00:27     Перегрузка оператора плюс, объединение двух массивов
Посмотрите здесь:

C++ Объединение двух массивов.
C++ Объединение двух массивов
Перегрузка оператора сравнения (==) для массивов C++
C++ Перегрузка оператора + для сложения двух экземпляров класса
Объединение двух массивов C++
C++ Объединение двух массивов
Выполнить объединение двух строк с помощью перегрузки оператора (*) C++
Перегрузка оператора + (объединение одномерных массивов) C++

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

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

Добавлено через 5 минут
Возвращаемый тип при сложении будет Array&, а в теле пишите return this.
timqha
0 / 0 / 0
Регистрация: 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;
}
может кто посоветует по улучшению кода.
Yandex
Объявления
17.12.2013, 01:32     Перегрузка оператора плюс, объединение двух массивов
Ответ Создать тему
Опции темы

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