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

Наследование: как передать массив одного класса другому классу?

22.01.2017, 14:19. Показов 7339. Ответов 36
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе время суток, нужна помощь. Не могу сотворить чудо. Сомневаюсь уже во всём. Как передать массив одного класса другому классу? Дабы наследник использовал свои функции для преобразования массива. И как этот преобразованный массив потом грамотно вывести?
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
class 1array
{
    int *massiv;
    int imax;
public:
    1array()                    
    {
        imax = 10;
 
        massiv = new int [imax];
        for (int i = 0; i < imax; i++)
        massiv[i] = 0;
    }
 
class 2array : public 1array
{
public:
 
        void f1 (int *massiv, int imax)
        {};
 
        void f2 (int *massiv, int imax)
        {};
 
};
 
int main()
{
    setlocale(LC_ALL, "Rus");
 
    1array A;
    cout << "Элементы массива" << endl;
        A.Vivod();
 
    2array B;
    cout << endl << "Элементы преобразованного массива" << endl;
    B.Vivod();
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.01.2017, 14:19
Ответы с готовыми решениями:

Как передать параметры конструктора одного класса другому?
Скажите пожалуйста, как это должно работать? Как передать параметры конструктора одного класса другому? #include &lt;iostream&gt; ...

В чем заключается наследование одного класса другому?
Вообщем есть пара заданий теория ,можек кто-нибудь помочь и ответить на них 1. В чем заключается наследование одного класса другому? В...

Полиморфизм, наследование и приведение экземпляров класса одного к другому
Есть некий класс со своими переменными,его экземпляр занимает какое-то количество памяти. Интерфейс выглядит примерно так: /*...

36
Эксперт С++
1624 / 954 / 782
Регистрация: 06.02.2016
Сообщений: 2,452
Записей в блоге: 31
22.01.2017, 16:23
Цитата Сообщение от Александр Зуев Посмотреть сообщение
class 1array
Сомнительно решение давать имя, которое начинается с числа

Добавлено через 2 минуты
Не совсем понял чего вы хотите, но можно
C++
1
2
3
protected:
int *massiv;
int imax;
Что бы наследник мог получать доступ к массиву
0
0 / 0 / 0
Регистрация: 22.01.2017
Сообщений: 11
22.01.2017, 17:33  [ТС]
Peoples, хочу передать массив с числами одного класса - другому классу, и в этом другом, используя свои функции изменить его и вывести

Добавлено через 14 минут
Peoples, проблема в том, что при изменении 1array параметры сохраняются, но последующая передача параметров классу-наследнику 2array происходит некорректно, и 2array выводит массив, из ячеек, значения которых равны нулю. И я не могу понять, что именно не так.
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
23.01.2017, 06:52
Цитата Сообщение от Peoples Посмотреть сообщение
Сомнительно решение давать имя, которое начинается с числа
Не просто сомнительно. Код с такими именами переменных попросту не должен компилироваться.

Добавлено через 28 минут
Цитата Сообщение от Александр Зуев Посмотреть сообщение
проблема в том, что при изменении 1array параметры сохраняются, но последующая передача параметров классу-наследнику 2array происходит некорректно, и 2array выводит массив, из ячеек, значения которых равны нулю. И я не могу понять, что именно не так.
Александр Зуев, проблема в том, что нам отсюда не видно, что у Вас там не получается. Вот у меня всё отлично получается:
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
#include <iostream>
 
class Array_1
{
protected:
    int* arr_;
    unsigned int len_;
 
public:
    Array_1() : len_( 10 )
    {
        arr_ = new int[len_];
        for ( unsigned int i = 0; i < len_; ++i )
            arr_[i] = 0;
    }
 
    ~Array_1()
    {
        delete arr_;
    }
 
};
 
class Array_2 : public Array_1
{
public:
    void set_value( int value, unsigned int index )
    {
        arr_[index] = value;
    }
 
    void show() const
    {
        for ( unsigned int i = 0; i < len_; ++i )
            std::cout << arr_[i] << " ";
    }
 
    unsigned int size() const
    {
        return len_;
    }
};
 
int main()
{
    Array_2 arr2;
    for ( unsigned int i = 0; i < arr2.size(); ++i )
        arr2.set_value( i, i );
 
    arr2.show();
}
0
0 / 0 / 0
Регистрация: 22.01.2017
Сообщений: 11
25.01.2017, 11:20  [ТС]
gru74ik, А можно отправить вам полный код в личку?
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
25.01.2017, 11:59
Александр Зуев, не надо. Постите здесь. Если кода очень много, приложите его в виде архива.
0
0 / 0 / 0
Регистрация: 22.01.2017
Сообщений: 11
25.01.2017, 12:04  [ТС]
gru74ik,

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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
#include <iostream>
#include <time.h>
 
using namespace std;
 
class Tarray
{
public:
    int *mas;
    int max;
    Tarray();                           // Зануляка
    Tarray(int n);                      // Рандом
    Tarray(const Tarray&v1);            // Копирование
 
    ~Tarray(){ delete[] mas; };         // Диструктор
 
    void Vvod()                         // Ввод
    {
        for (int i = 0; i<max; i++)
        {
            cout << "Введите " << i + 1 << " элемент массива" << endl;
            cin >> mas[i];
        }
    };
    void Vivod()                        // Вывод
    {
        for (int i = 0; i<max; i++)
        {
            cout << mas[i] << "\t";
        }
        cout << endl;
    };
 
 
    void sort1()                        // Сортировка по возрастанию
    {
        int sorts;
        for (int j = 1; j<max; j++)
        {
            for (int i = 0; i<max - j; i++)
            {
                if (mas[i]>mas[i + 1])
                {
                    sorts = mas[i];
                    mas[i] = mas[i + 1];
                    mas[i + 1] = sorts;
                }
            }
        }
    };
 
    void sort2()                        // Сортировка по возрастанию
    {
        int sorts;
        for (int j = 1; j<max; j++)
        {
            for (int i = 0; i<max - j; i++)
            {
                if (mas[i]<mas[i + 1])
                {
                    sorts = mas[i];
                    mas[i] = mas[i + 1];
                    mas[i + 1] = sorts;
                }
            }
        }
    };
 
    friend ostream& operator<<(ostream& stream, const Tarray& obj)  // Перегруз оператора вставки в поток
    {
        for (int i = 0; i<obj.max; i++)
        {
            stream << "=" << obj.mas[i] << "\t";
        }
        return stream;
    }
 
    friend istream& operator>>(istream& stream, Tarray& obj)        // перегруз оператора извлечения из потока
    {
        for (int i = 0; i<obj.max; i++)
        {
            stream >> obj.mas[i];
        }
        return stream;
    }
 
    Tarray operator + (const Tarray &op1)                           // Перегрузка оператора +
    {
        Tarray summ(op1);
        for (int i = 0; i < op1.max; i++)
        {
            summ.mas[i] += mas[i];
        }
        return summ;
    }
 
    Tarray & operator = (const Tarray &op1)
    {
        for (int i = 0; i < op1.max; i++)
        {
            mas[i] = op1.mas[i];
        }
        return *this; // Параметр доступа к текущему экземпляру класса
    }
 
};
 
 
Tarray::Tarray()                            // Создаём и зануляем (конструктор)
{
    int max = 99999999;
    mas = new int[max];
    for (int i = 0; i < max; i++)
        mas[i] = 0;
}
 
Tarray::Tarray(int n)                       // Рандом
{
    time_t t;
    srand((unsigned)time(&t));
    max = n;
    mas = new int[n];
    for (int i = 0; i<n; i++)
    {
        mas[i] = rand() % 10;
    }
};
 
Tarray::Tarray(const Tarray&v1)             // Копирование
{
    mas = new int[v1.max];
    max = v1.max;
    for (int i = 0; i<max; i++)
    {
        mas[i] = v1.mas[i];
    }
};
 
class tTarray : public Tarray
{
public:
    int chi; // Числодля выборки, которое должно передаваться как праметр функции
    
    void invers(int *mas, int max)          // Инверсия
    {
        for (int i = 0; i < max / 2; i++)
        {
            int r = mas[i];
            mas[i] = mas[max - 1 - i];
            mas[max - 1 - i] = r;
        }
    }
 
    void vyborka(int *mas, int max, int chi)    // Выборка
    {
        for (int i = 0; i < max; i++)
        {
            if (mas[i] % chi != 0)
            {
                mas[i] = 0;
            }
        }
    }
};
 
int main()
{
    setlocale(LC_ALL, "Rus");
    Tarray B;
    cout << "Размерность массива: " << endl;
    cin >> B.max;
    cout << "Элементы массива" << endl;
    B.Vivod();
    cout << endl << "Ввод элементов массива:" << endl << endl;
    B.Vvod();
    cout << endl << "Вывод введённого массива" << endl;
    B.Vivod();
    Tarray C(B.max);
    cout << endl << "Сгенерированный массив" << endl;
    C.Vivod();
    Tarray D = B;
    cout << endl << "Копированный массив" << endl;
    D.Vivod();
    cout << endl << "Если вам нужно отсортировать массив по возрастанию, введите 123" << endl;
    cout << "Если вам нужно отсортировать массив по убыванию, введите 321" << endl << endl;
    int x;
    cin >> x;
    cout << endl << "Отсортированный массив" << endl;
    if (x == 123)
        D.sort1();
    if (x == 321)
        D.sort2();
    D.Vivod();
    Tarray S = B + C + D;
    cout << endl << "Cумма введённого, сгенерированного и отсортирова.нного массива" << endl << S << endl;
    tTarray Z;
    cout << "Введите делилку" << endl;
    cin >> Z.chi;
    Z.invers();
    Z.vyborka();
    cout << endl << "Наследник" << endl;
    Z.Vivod();
};
Вложения
Тип файла: zip Код.zip (1.5 Кб, 3 просмотров)
0
0 / 0 / 0
Регистрация: 22.01.2017
Сообщений: 11
25.01.2017, 19:11  [ТС]
gru74ik, Ну никак не могу понять, что не так... Кучу всего уже перепробовал...
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
25.01.2017, 19:13
Александр Зуев, сейчас попробуем найти, что не так.
1
5 / 5 / 0
Регистрация: 15.01.2017
Сообщений: 49
25.01.2017, 19:32
Возможно ошибаюсь, но почему нельзя объявить массив глобально? Поправьте если ошибаюсь.
0
0 / 0 / 0
Регистрация: 22.01.2017
Сообщений: 11
25.01.2017, 19:36  [ТС]
Claud254, фишка в задании)) Надо сделать класс-наследник =)
0
5 / 5 / 0
Регистрация: 15.01.2017
Сообщений: 49
25.01.2017, 19:39
Ааа, тогда понятно) Чтож, я тут бесполезен)
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
25.01.2017, 20:29
Александр Зуев, маленько поправил:
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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
#include <iostream>
#include <ctime>
#include <cstdlib>
 
using std::cout;
using std::cin;
using std::endl;
using std::ostream;
using std::istream;
 
class Tarray
{
private:
    unsigned int size_;
    int* mas;
 
public:
 
    enum { DEFAULT_SIZE = 7 };
 
    Tarray() : size_( DEFAULT_SIZE ) // Конструктор по умолчанию
    {
        mas = new int[size_];
        for (unsigned int i = 0; i < size_; i++)
            mas[i] = 0;
    }
 
    Tarray(unsigned int sz) : size_( sz )  // Конструктор с одним параметром
    {                                       // (рандомное заполнение массива)
        time_t t;
        srand((unsigned)time(&t));
        mas = new int[size_];
        for (unsigned int i = 0; i < size_; i++)
        {
            mas[i] = rand() % 10;
        }
    }
 
    Tarray(const Tarray& v1)    // Конструктор копирования
    {
        mas = new int[v1.size_];
        size_ = v1.size_;
        for (unsigned int i = 0; i < size_; i++)
        {
            mas[i] = v1.mas[i];
        }
    }
 
    ~Tarray()                   // Деструктор
    {
        delete mas;
    }
 
    void Vvod()                 // Ввод
    {
        for (unsigned int i = 0; i < size_; i++)
        {
            cout << "Enter " << i + 1 << " element of the array" << endl;
            cin >> mas[i];
        }
    }
 
    void set_size()
    {
        cout << "Enter array size: " << endl;
        cin >> size_;
    }
 
    unsigned int size() const
    {
        return size_;
    }
 
    int elem( unsigned int index ) const
    {
        return mas[index];
    }
 
    void set_elem( unsigned int index, int value )
    {
        mas[index] = value;
    }
 
    void Vivod()                        // Вывод
    {
        for ( unsigned int i = 0; i < size_; i++ )
        {
            cout << mas[i] << "\t";
        }
        cout << endl;
    }
 
    int sum() const
    {
        int sum_of_elements = 0;
        for ( unsigned int i = 0; i < size_; i++ )
            sum_of_elements += mas[i];
 
        return sum_of_elements;
    }
 
    void sort1()                        // Сортировка по возрастанию
    {
        int sorts = 0;
        for (unsigned int j = 1; j < size_; j++)
        {
            for (unsigned int i = 0; i < size_ - j; i++)
            {
                if (mas[i] > mas[i + 1])
                {
                    sorts = mas[i];
                    mas[i] = mas[i + 1];
                    mas[i + 1] = sorts;
                }
            }
        }
    }
 
    void sort2()                        // Сортировка по возрастанию
    {
        int sorts = 0;
        for (unsigned int j = 1; j < size_; j++)
        {
            for (unsigned int i = 0; i < size_ - j; i++)
            {
                if (mas[i]<mas[i + 1])
                {
                    sorts = mas[i];
                    mas[i] = mas[i + 1];
                    mas[i + 1] = sorts;
                }
            }
        }
    }
 
    friend ostream& operator<<(ostream& stream, const Tarray& obj)  // Перегрузка оператора вставки в поток
    {
        for (unsigned int i = 0; i < obj.size(); i++)
        {
            stream << " = " << obj.mas[i] << "\t";
        }
        return stream;
    }
 
    friend istream& operator>>(istream& stream, Tarray& obj)        // перегрузка оператора извлечения из потока
    {
        for (unsigned int i = 0; i < obj.size(); i++)
        {
            stream >> obj.mas[i];
        }
        return stream;
    }
 
    Tarray operator+(const Tarray &op1)                           // Перегрузка оператора +
    {
        Tarray summ(op1);
        for (unsigned int i = 0; i < op1.size(); i++)
        {
            summ.mas[i] += mas[i];
        }
        return summ;
    }
 
    Tarray& operator=(const Tarray &op1)
    {
        for (unsigned int i = 0; i < op1.size(); i++)
        {
            mas[i] = op1.mas[i];
        }
        return *this; // Параметр доступа к текущему экземпляру класса
    }
 
};
 
class tTarray : public Tarray
{
    int chi_; // Число для выборки, которое должно передаваться как праметр функции
 
public:
    tTarray() : Tarray()
    {
        chi_ = 0;
    }
 
    void set_divivder()
    {
        cout << "Enter divider" << endl;
        cin >> chi_;
    }
 
    void invers()          // Инверсия
    {
        int r = 0;
        for (unsigned int i = 0; i < size() / 2; i++)
        {
            r = elem( i );
            set_elem( i, elem( size() - 1 - i ) );
            set_elem( size() - 1 - i, r );
        }
    }
 
    void vyborka()    // Выборка
    {
        for ( unsigned int i = 0; i < size(); i++ )
        {
            if ( elem( i ) % chi_ != 0 )
            {
                set_elem( i, 0 );
            }
        }
    }
};
 
int main()
{
    Tarray B;
 
    cout << "Elements of the array:" << endl;
    B.Vivod();
 
    cout << endl << "Input of the elements:" << endl << endl;
    B.Vvod();
 
    cout << endl << "Output of the array that was entered:" << endl;
    B.Vivod();
 
    Tarray C( B.size() );
 
    cout << endl << "Generated array:" << endl;
    C.Vivod();
 
    Tarray D = B;
    cout << endl << "Copied array:" << endl;
    D.Vivod();
 
    cout << endl << "If you want to sort your array in ascending order, enter 123" << endl;
    cout << "If you want to sort your array in descending order, enter 321" << endl << endl;
    int x;
    cin >> x;
 
    cout << endl << "Sorted array:" << endl;
    if (x == 123)
        D.sort1();
    if (x == 321)
        D.sort2();
    D.Vivod();
 
    Tarray S = B + C + D;
    cout << endl << "Summarized array:" << endl;
    S.Vivod();
    cout << endl << "Summ of all elements of the array: " << S.sum() << endl;
 
    tTarray Z;
    Z.set_divivder();
    Z.invers();
    Z.vyborka();
    cout << endl << "Inheritor:" << endl;
    Z.Vivod();
}
Миниатюры
Наследование: как передать массив одного класса другому классу?  
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
25.01.2017, 20:38
Александр Зуев, или даже так:
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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
#include <iostream>
#include <ctime>
#include <cstdlib>
 
using std::cout;
using std::cin;
using std::endl;
using std::ostream;
using std::istream;
 
class Tarray
{
private:
    unsigned int size_;
    int* mas;
 
public:
 
    enum { DEFAULT_SIZE = 7 };
 
    Tarray() : size_( DEFAULT_SIZE ) // Конструктор по умолчанию
    {
        mas = new int[size_];
        for ( unsigned int i = 0; i < size_; i++ )
            mas[i] = 0;
    }
 
    Tarray( unsigned int sz ) : size_( sz )  // Конструктор с одним параметром
    {                                       // (рандомное заполнение массива)
        time_t t;
        srand( ( unsigned )time( &t ) );
        mas = new int[size_];
        for ( unsigned int i = 0; i < size_; i++ )
        {
            mas[i] = rand() % 10;
        }
    }
 
    Tarray( const Tarray& v1 )    // Конструктор копирования
    {
        mas = new int[v1.size_];
        size_ = v1.size_;
        for ( unsigned int i = 0; i < size_; i++ )
        {
            mas[i] = v1.mas[i];
        }
    }
 
    ~Tarray()                   // Деструктор
    {
        delete mas;
    }
 
    void Vvod()                 // Ввод
    {
        for ( unsigned int i = 0; i < size_; i++ )
        {
            cout << "Enter " << i + 1 << " element of the array" << endl;
            cin >> mas[i];
        }
    }
 
    void set_size()
    {
        cout << "Enter array size: " << endl;
        cin >> size_;
    }
 
    unsigned int size() const
    {
        return size_;
    }
 
    int elem( unsigned int index ) const
    {
        return mas[index];
    }
 
    void set_elem( unsigned int index, int value )
    {
        mas[index] = value;
    }
 
    void Vivod()                        // Вывод
    {
        for ( unsigned int i = 0; i < size_; i++ )
        {
            cout << mas[i] << "\t";
        }
        cout << endl;
    }
 
    int sum() const
    {
        int sum_of_elements = 0;
        for ( unsigned int i = 0; i < size_; i++ )
            sum_of_elements += mas[i];
 
        return sum_of_elements;
    }
 
    void sort1()                        // Сортировка по возрастанию
    {
        int sorts = 0;
        for ( unsigned int j = 1; j < size_; j++ )
        {
            for ( unsigned int i = 0; i < size_ - j; i++ )
            {
                if ( mas[i] > mas[i + 1] )
                {
                    sorts = mas[i];
                    mas[i] = mas[i + 1];
                    mas[i + 1] = sorts;
                }
            }
        }
    }
 
    void sort2()                        // Сортировка по возрастанию
    {
        int sorts = 0;
        for ( unsigned int j = 1; j < size_; j++ )
        {
            for ( unsigned int i = 0; i < size_ - j; i++ )
            {
                if ( mas[i]<mas[i + 1] )
                {
                    sorts = mas[i];
                    mas[i] = mas[i + 1];
                    mas[i + 1] = sorts;
                }
            }
        }
    }
 
    friend ostream& operator<<( ostream& stream, const Tarray& obj )  // Перегрузка оператора вставки в поток
    {
        for ( unsigned int i = 0; i < obj.size(); i++ )
        {
            stream << " = " << obj.mas[i] << "\t";
        }
        return stream;
    }
 
    friend istream& operator>>( istream& stream, Tarray& obj )        // перегрузка оператора извлечения из потока
    {
        for ( unsigned int i = 0; i < obj.size(); i++ )
        {
            stream >> obj.mas[i];
        }
        return stream;
    }
 
    Tarray operator+( const Tarray &op1 )                           // Перегрузка оператора +
    {
        Tarray summ( op1 );
        for ( unsigned int i = 0; i < op1.size(); i++ )
        {
            summ.mas[i] += mas[i];
        }
        return summ;
    }
 
    Tarray& operator=( const Tarray &op1 )
    {
        for ( unsigned int i = 0; i < op1.size(); i++ )
        {
            mas[i] = op1.mas[i];
        }
        return *this; // Параметр доступа к текущему экземпляру класса
    }
 
};
 
class tTarray : public Tarray
{
    int chi_; // Число для выборки, которое должно передаваться как праметр функции
 
public:
    tTarray() : Tarray(), chi_ (0)
    {}
 
    tTarray( unsigned int sz ) : Tarray( sz ), chi_ (0)
    {}
 
    tTarray( unsigned int sz, int chi ) : Tarray( sz ), chi_ (chi)
    {}
 
    void set_divider()
    {
        cout << "Enter divider" << endl;
        cin >> chi_;
    }
 
    void invers()          // Инверсия
    {
        int r = 0;
        for ( unsigned int i = 0; i < size() / 2; i++ )
        {
            r = elem( i );
            set_elem( i, elem( size() - 1 - i ) );
            set_elem( size() - 1 - i, r );
        }
    }
 
    void vyborka()    // Выборка
    {
        for ( unsigned int i = 0; i < size(); i++ )
        {
            if ( elem( i ) % chi_ != 0 )
            {
                set_elem( i, 0 );
            }
        }
    }
};
 
int main()
{
    Tarray B;
 
    cout << "Elements of the array:" << endl;
    B.Vivod();
 
    cout << endl << "Input of the elements:" << endl << endl;
    B.Vvod();
 
    cout << endl << "Output of the array that was entered:" << endl;
    B.Vivod();
 
    Tarray C( B.size() );
 
    cout << endl << "Generated array:" << endl;
    C.Vivod();
 
    Tarray D = B;
    cout << endl << "Copied array:" << endl;
    D.Vivod();
 
    cout << endl << "If you want to sort your array in ascending order, enter 123" << endl;
    cout << "If you want to sort your array in descending order, enter 321" << endl << endl;
    int x;
    cin >> x;
 
    cout << endl << "Sorted array:" << endl;
    if ( x == 123 )
        D.sort1();
    if ( x == 321 )
        D.sort2();
    D.Vivod();
 
    Tarray S = B + C + D;
    cout << endl << "Summarized array:" << endl;
    S.Vivod();
    cout << endl << "Summ of all elements of the array: " << S.sum() << endl;
 
    tTarray Z( 9 );
    Z.set_divider();
    Z.invers();
    Z.vyborka();
    cout << endl << "Inheritor:" << endl;
    Z.Vivod();
}
Миниатюры
Наследование: как передать массив одного класса другому классу?  
0
0 / 0 / 0
Регистрация: 22.01.2017
Сообщений: 11
25.01.2017, 22:42  [ТС]
gru74ik, к сожалению как-то он некорректно работает... Наследник выдаёт вместо моих чисел отсебятину, можно это как-то исправить?)

Добавлено через 1 минуту
gru74ik, Да и размерность у них должна быть одна)) Хотя... Даже когда одну задал - всё равно что-то своё выдал мне)
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
25.01.2017, 22:44
Цитата Сообщение от Александр Зуев Посмотреть сообщение
можно это как-то исправить?
Можно. Исправляйте. Я в Ваш код особо не вникал. Просто заставил его работать.

Добавлено через 1 минуту
Цитата Сообщение от Александр Зуев Посмотреть сообщение
Да и размерность у них должна быть одна
Задайте одинаковую размерность. В чём проблема-то? Не можете самостоятельно исправить число 9 на число 7?
0
0 / 0 / 0
Регистрация: 22.01.2017
Сообщений: 11
25.01.2017, 22:51  [ТС]
gru74ik, Ну, пока что я понял как он задаёт размерность наследнику, а вот откуда он берёт потом числа, и что он с ними делает - для меня, по вашим исправлениям - полная и необъяснимая загадка))

Добавлено через 54 секунды
gru74ik, Я же написал в том же предложении, что задавал её))

Добавлено через 5 минут
gru74ik, Шеф, из двухсот человек, за несколько дней - только вы смогли мне хоть чем-то помочь!) Упокойте мою душу) Помогите мне разобраться с этой бедой, дабы я мог спокойно спать =)
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
25.01.2017, 22:52
Цитата Сообщение от Александр Зуев Посмотреть сообщение
я понял как он задаёт размерность наследнику, а вот откуда он берёт потом числа
Александр Зуев, какие числа-то?

Цитата Сообщение от Александр Зуев Посмотреть сообщение
и что он с ними делает
Что Вы написали, то и делает. Вам лучше знать.

Цитата Сообщение от Александр Зуев Посмотреть сообщение
для меня, по вашим исправлениям - полная и необъяснимая загадка))
А для меня условие Вашей задачи - загадка. Как понял Вашу задачу, так и написал код. Было бы нормальное техзадание, был бы нормальный ответ. А так - garbage in, garbage out.
0
0 / 0 / 0
Регистрация: 22.01.2017
Сообщений: 11
25.01.2017, 22:55  [ТС]
gru74ik, данные из Tarray S должны передаться наследнику, тот должен провести инверсию с массивом, и потом сделать выборку из него в соответствии по числу "chi"
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
25.01.2017, 22:56
Александр Зуев, два вопроса:
  1. что в Вашем понимании "инверсия"?
  2. что в Вашем понимании "выборка"?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.01.2017, 22:56
Помогаю со студенческими работами здесь

Не получается передать значение одного класса в другому классу
Добрый день не получается передать значение indi класса А в класс Anssingment Заранне благодарен! class Program { ...

Как передать контролы другому классу?
Думаю проще всего как мне обьект этой формы передать в след класс, в котором я буду работать с формой но как пример можно? а то все в 1...

Как передать объекты одного пользователя другому?
У меня есть два пользователя user1 и user2, не могу передать user2 права execute и select объектов пользовеля user1, в Object Privileges...

Не удается обратиться к другому классу из класса
class Foos { public function errosr($text) { print_r('ffff'); $this-&gt;error = &quot;&lt;span...

Наследование от protected класса: будут ли public члены класса Б доступны классу А
Добрый день! Если пронаследовать public класс А от protected класса Б, будут ли public члены класса Б доступны классу А, и доступны...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru