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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вычислить сумму элементов матрицы, номера строк и столбцов которых принадлежат определенным множествам http://www.cyberforum.ru/cpp-beginners/thread1033911.html
вот условие 10. Вычислить сумму тех элементов матрицы A, номера строк и столбцов которых принадлежат соответственно непустым множествам S1 и S2 типа Nom. Cons n=10; Type Nomer= 1..n; Матрица = Array of Real; Nom = Set of Номер; Я пытался что сам на писать посмотрите или отредактируйте или запишите свой вариант плиз
C++ Найти ошибку в выделенном тексте программы Условие : Задано 2 матрицы Х(4,4) и У(4,4) . Сформировать из них матрицу Z(4,8), включая в первые 4 строки матрицу Х , а во вторые 4 - матрицу У. Вывести задание и сформированную матрицы. http://www.cyberforum.ru/cpp-beginners/thread1033908.html
Написать программу ввода положительных чисел C++
помогите решить задачи С + + в цикле while 1. Написать программу ввода положительных чисел.
C++ Найти норму матрицы
Найти норму матрицы, если норма матрицы представляет из себя максимальное из чисел, полученных при сложении всех элементов каждой строки, взятых по модулю. Как составить программу? Есть набросок: #include <iostream> #include <cmath> using namespace std; int main() {float result; float sum=0; cout<<"razmer macciva 10x10"<<endl;
C++ Управляющий граф программы http://www.cyberforum.ru/cpp-beginners/thread1033871.html
Нужно написать граф потока управления (Control Flow Graph) по исходному коду на си, может есть у кого-нибудь мысли какие, или наработки, помогите пожалуйста.
C++ Как реализовать двухмерный массив по аналогии с Delphi? Delphi как реализовать: st = array of real; t = array of st; на с++, как указать типа st: float st; подробнее

Показать сообщение отдельно
timqha
0 / 0 / 0
Регистрация: 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;
}
может кто посоветует по улучшению кода.
 
Текущее время: 14:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru