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

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

09.12.2013, 00:27. Показов 6559. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.12.2013, 00:27
Ответы с готовыми решениями:

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

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

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

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

Добавлено через 5 минут
Возвращаемый тип при сложении будет Array&, а в теле пишите return this.
1
0 / 0 / 1
Регистрация: 05.07.2013
Сообщений: 2
17.12.2013, 01:32  [ТС]
Цитата Сообщение от 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
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 String { char *str; int...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru