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

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

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

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

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

Перегрузка оператора + (объединение одномерных массивов) - C++
Доброго времени суток. Написала программку по заданию, но к сожалению возникает ошибка error C2955: 'Array' : use of class template...

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

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

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

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

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

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

Добавлено через 5 минут
Возвращаемый тип при сложении будет Array&, а в теле пишите return this.
1
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;
}
может кто посоветует по улучшению кода.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.12.2013, 01:32
Привет! Вот еще темы с ответами:

Перегрузка оператора + для сложения двух экземпляров класса - 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...

Объединение двух массивов - C++
Есть два массива констант. a ,b. Необходимо из элементов этих массивов сделать третий массив ab берем 5 элементов массива (b) и по...

Объединение двух массивов - C++
Пожалуйста! Дано два впорядкованих за зростанням масиви A(m) та B(n). Отримати з них за допомогою злиття впорядкований за зростанням...

Объединение двух массивов - C++
Написать программу, которая объединяет два упорядоченных по возрастанию массива в один, также упорядоченный массив.


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

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

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