Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.64/25: Рейтинг темы: голосов - 25, средняя оценка - 4.64
3 / 3 / 8
Регистрация: 14.10.2012
Сообщений: 288

Массив объектов абстрактного класса

10.05.2016, 19:00. Показов 5441. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть абстрактный класс с двумя чисто виртуальными методами, от него наследуются два класса в которых эти методы переопределены и есть класс множество, в котором есть массив объектов базового абстрактного класса и нужно выполнить некоторые действия(вставка, удаление, пересечение)
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
#include <iostream>
#include <string>
#include "stdlib.h"
#include "stdio.h"
 
using namespace std;
 
class IObject
{
public:
    virtual bool less(IObject*) = 0;
    virtual IObject *clone() = 0;
};
 
class StringObject: public IObject
{
    string data;
public:
    void setData(string temp);
    string getData();
    bool less(IObject*);
    IObject *clone();
};
 
class IntObject : public IObject
{
    int data;
public:
    void setData(int temp);
    int getData();
    bool less(IObject*);
    IObject *clone();
};
 
void IntObject::setData(int temp)
{
    data = temp;
}
 
int IntObject::getData()
{
    return data;
}
bool IntObject::less(IObject* obj)
{
    if (IntObject *bt = dynamic_cast<IntObject*>(obj))
    {
        return true;
    }
    return false;
}
IObject* IntObject::clone()
{
    IntObject* ret = new IntObject;
    ret->setData(this->getData());
    return ret;
}
 
bool StringObject::less(IObject* obj)
{
    if (StringObject *bt = dynamic_cast<StringObject*>(obj))
    {
        return true;
    }
    return false;
}
void StringObject:: setData(string temp)
{
    data = temp;
}
string StringObject::getData()
{
    return data;
}
 
IObject* StringObject::clone()
{
    StringObject* ret = new StringObject;
    ret->setData(this->getData());
    return ret;
}
 
class set_t{
    IObject* data;
    int size;
public:
    set_t();
    set_t(const set_t &data);
    void insert(IObject* f_data);
    void realloc_plus(char ch);
    int get_size();
    IObject& operator [](size_t pos);
    void show();
};
 
IObject& set_t::operator [](size_t pos)
{
    return data[pos];
}
ostream& operator << (ostream& stream, set_t& str)
{
    for (int i = 0; i < str.get_size(); i++)
        stream << str[i] << " ";
    return stream;
}
 
set_t::set_t()
{
    data = NULL;
    size = 0;
}
void set_t::realloc_plus(char ch)
{
    size++;
    if (ch == 'I')
        data = new IntObject[size];
}
void set_t::insert(IObject *f_data)
{
    realloc_plus('I');
    data = f_data;
}
 
int set_t::get_size()
{
    return size;
}
 
int main()
{
    IntObject intA;
    IObject * p1 = &intA;
    set_t t;
    intA.setData(1);
    t.insert(p1);
    cout << t << endl;
    return 0;
}
Почему у меня не работает выывод? и еще,
C++
1
виртуальная функция должна сравнивать объекты на меньше, что это значит?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.05.2016, 19:00
Ответы с готовыми решениями:

Переопределение конструктора копирования абстрактного класса, на клонирование дочерних объектов
Здравствуйте. Помогите решить следующую проблему. Есть абстрактный класс Object, у которого есть метод AddChild(Object* child)...

Поместить в динамически расширяемый массив объекты класса, производные от базового абстрактного класса
Помогите пожалуйста новичку! (мне). Я хочу создать динамически расширяющийся массив указателей на базовый абстрактный класс,...

Динамический массив абстрактного класса
Никак не могу понять, почему память не освобождается. Подскажите в чем ошибка пожалуйста. #ifndef Lol #define Lol #include...

26
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
11.05.2016, 18:55
Студворк — интернет-сервис помощи студентам
И как тогда объединять по одному элементу, что ли?
0
3 / 3 / 8
Регистрация: 14.10.2012
Сообщений: 288
11.05.2016, 19:59  [ТС]
nmcf, вот, я реализовал.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void set_t::_union(set_t &un_obj)
{
    set_t r;
    r.data = new IObject*[size + un_obj.size];
    r.size = size + un_obj.size;
    int i = 0;
    for(i = 0; i < size; i++)
    {
        r.data[i] = data[i];
    }
    for(; i < size + un_obj.size; i++)
    {
        r.data[i] = un_obj.data[i];
    }
    delete []data;
    data = new IObject*[r.size];
    for(int i = 0; i < r.size; i++)
        data[i] = r.data[i];
    delete []r.data;
}
Но вопрос в том, что в задании сказано, что нужно в методах использовать указатель на IObject есть ли способ написать данный метод так, чтобы он принимал указатель на IObject?

Добавлено через 56 минут
nmcf, поправка. теперь верно работает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
set_t set_t::_union(set_t &un_obj)
{
    set_t r;
    r.data = new IObject*[size + un_obj.size];
    r.size = size + un_obj.size;
    int i = 0;
    for(i = 0; i < size; i++)
    {
        r.data[i] = data[i];
    }
 
    for(int j = 0; i < r.size; i++, j++)
    {
        r.data[i] = un_obj.data[j];
    }
 
    return r;
}
Добавлено через 2 минуты
nmcf, теперь вот какой вопрос)) нужно написать метод для удаления элемента из множества, я вот как сделал
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void set_t::del(IObject *del_obj)
{
    IObject** ptrTemp = new IObject*[size - 1];
    int k = 0;
    for(int i = 0; i < size; i++)
        if(data[i] != del_obj)
        {
            ptrTemp[k] = data[i];
            IntObject *bi = dynamic_cast<IntObject*>(ptrTemp[k]);
            cout << *bi << endl;
            k++;
        }
    delete []data;
 
    data = ptrTemp;
}
только вот вопрос, как сравнивать объекты. т.е. мое условие
C++
1
 if(data[i] != del_obj)
не работает
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
11.05.2016, 20:28
Надо по полю data, которое у StringObject и IntObject, сравнивать. Ну и сам тип тоже.
0
3 / 3 / 8
Регистрация: 14.10.2012
Сообщений: 288
11.05.2016, 23:38  [ТС]
nmcf, спасибо, вот, сделал
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void set_t::del(IObject *del_obj)
{
    IObject** ptrTemp = new IObject*[size - 1];
    int k = 0;
    for(int i = 0; i < size; i++)
    {
        IntObject *bi = dynamic_cast<IntObject*>(data[i]);
        IntObject *di = dynamic_cast<IntObject*>(del_obj);
        if(bi->get_data() != di->get_data())
        {
            ptrTemp[k] = data[i];
            k++;
        }
    }
    for(int i = 0; i < size; i++)
        delete []data[i];
 
    size = size - 1;
    data = new IObject*[size];
 
    for(int i = 0; i < size; i++)
        data[i] = ptrTemp[i];
}
только еще один вопрос: у меня в задании есть некая функция "bool less(IObject*) – для
сравнения объектов на меньше" вот что это значит. и в функции del я делаю приведение к IntObject, а как сделать так, чтобы программа сама понимала к какому типу нужно приводить?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
12.05.2016, 07:59
Нет, так не верно. Ты должен учитывать, что в множестве могут быть и IntObject и StringObject. А у тебя всё к IntObject приводится.
Для сравнения примерно так:
C++
1
2
3
4
virtual bool StringObject::less(IObject *o)
{
    return typeid(*this) == typeid(*o) && data < dynamic_cast<StringObject *>(o)->data;
}
Для IntObject аналогично.
0
3 / 3 / 8
Регистрация: 14.10.2012
Сообщений: 288
12.05.2016, 20:26  [ТС]
nmcf, почти доделал лабораторную.
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
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
class IObject
{
public:
    virtual bool less(IObject*) = 0;
    virtual IObject *clone() = 0;
};
 
class IntObject : public IObject
{
    int data;
public:
    IntObject();
    IntObject(int n);
    int get_data();
    IObject *clone();
    virtual bool less(IObject *o);
    friend ostream& operator << (ostream& stream, IntObject& str);
};
 
IObject* IntObject::clone()
{
    return new IntObject(data);
}
 
IntObject::IntObject(int n)
{
    data = n;
}
 
IntObject::IntObject()
{
}
 
ostream& operator << (ostream& stream, IntObject& str)
{
    stream << str.data;
    return stream;
}
 
int IntObject::get_data()
{
    return data;
}
 
bool IntObject::less(IObject *o)
{
    return typeid(*this) == typeid(*o) && get_data() < dynamic_cast<IntObject *>(o)->get_data();
}
 
class StringObject: public IObject
{
    string data;
public:
    StringObject();
    StringObject(string temp);
    IObject *clone();
    friend ostream& operator << (ostream& stream, const StringObject& str);
    bool less(IObject *o);
    string get_data();
};
 
StringObject::StringObject(string temp)
{
    data = temp;
}
StringObject::StringObject(){}
 
IObject* StringObject::clone()
{
    return new StringObject(*this);
}
 
ostream& operator << (ostream& stream, const StringObject& str)
{
    stream << str.data;
    return stream;
}
 
string StringObject::get_data()
{
    return data;
}
 
bool StringObject::less(IObject *o)
{
    return typeid(*this) == typeid(*o) && get_data() < dynamic_cast<StringObject *>(o)->get_data();
}
 
class set_t{
    IObject** data;
    int size = 0;
public:
    set_t();
    set_t(const set_t &l);
    ~set_t(){ delete []data; };
    void show();
    void add(IObject *add_obj);
    void del(IObject *del_obj);
    bool membership(IObject *memd_obj);
    int binsearch(IObject* search_el);
    set_t& crossing(const set_t &right);
    set_t& difference(const set_t &right);
    set_t _union(const set_t &un_obj) const;
};
 
set_t::set_t()
{
    data = NULL;
    size = 0;
}
 
set_t::set_t(const set_t &l)
{
    size = l.size;
    for(int i = 0; i < size; i++)
        *data[i] = *l.data[i];
}
 
void set_t::add(IObject *obj)
{
    IObject** ptrTemp = new IObject*[size + 1];
 
    for (int i = 0; i < size; i++)
        ptrTemp[i] = data[i];
 
    delete [] data;
 
    data = ptrTemp;
 
    data[size++] = obj->clone();
}
 
void set_t::del(IObject *del_obj)
{
    IObject** ptrTemp = new IObject*[size - 1];
    int k = 0;
    for(int i = 0; i < size; i++)
    {
        IntObject *bi = dynamic_cast<IntObject*>(data[i]);
        if(!bi->less(data[i]))
            bi = dynamic_cast<IntObject*>(data[i]);
         //   cout << "13" << endl;
        IntObject *di = dynamic_cast<IntObject*>(del_obj);
        if(bi->get_data() != di->get_data())
        {
            ptrTemp[k] = data[i];
            k++;
        }
    }
 
        delete []data;
 
    size = size - 1;
    data = new IObject*[size];
 
    for(int i = 0; i < size; i++)
        data[i] = ptrTemp[i];
 
    delete []ptrTemp;
 
}
 
set_t set_t::_union(const set_t &un_obj) const
{
    set_t r;
    r.data = new IObject*[size + un_obj.size];
    r.size = size + un_obj.size;
    int k = 0;
 
    for(int i = 0; i < size; i++)
    {
        r.data[k++] = data[i];
    }
    for(int j = 0; j < un_obj.size; j++)
    {
        r.data[k++] = un_obj.data[j];
    }
    r.show();
    return r;
}
 
bool set_t::membership(IObject *memd_obj)
{
    bool result = false;
    for(int i = 0; i < size; i++)
    {
        IntObject *bi = dynamic_cast<IntObject*>(data[i]);
        IntObject *di = dynamic_cast<IntObject*>(memd_obj);
        if( bi->get_data() == di->get_data())
            result = true;
        delete bi;
        delete di;
    }
    return result;
}
 
set_t& set_t::crossing(const set_t &right)
{
    int k = 0;
    for(int i = 0; i < size; i++)
    {
        IntObject *bi = dynamic_cast<IntObject*>(data[i]);
        for(int j = 0; j < size; j++)
        {
            IntObject *di = dynamic_cast<IntObject*>(right.data[j]);
            if(bi->get_data() == di->get_data())
                k++;
            delete di;
        }
        delete bi;
    }
 
    set_t cros_obj;
    cros_obj.data = new IObject*[k];
    cros_obj.size = k;
    k = 0;
    for(int i = 0; i < size; i++)
    {
        IntObject *bi = dynamic_cast<IntObject*>(data[i]);
        for(int j = 0; j < size; j++)
        {
            IntObject *di = dynamic_cast<IntObject*>(right.data[j]);
            if(bi->get_data() == di->get_data())
                cros_obj.data[k] = data[i];
            delete di;
        }
        delete bi;
    }
 
    return cros_obj;
}
 
set_t& set_t::difference(const set_t &right)
{
    int k = 0;
    int count = 0;
    for(int i = 0; i < size; i++)
    {
        IntObject *bi = dynamic_cast<IntObject*>(data[i]);
        count = 0;
        for(int j = 0; j < size; j++)
        {
            IntObject *di = dynamic_cast<IntObject*>(right.data[j]);
            if(bi->get_data() != di->get_data())
                count++;
            if(count == size)
                k++;
            delete di;
        }
        delete bi;
    }
 
    set_t dif_obj;
    dif_obj.data = new IObject*[k];
    dif_obj.size = k;
    k = 0;
    for(int i = 0; i < size; i++)
    {
 
        IntObject *bi = dynamic_cast<IntObject*>(data[i]);
        for(int j = 0; j < size; j++)
        {
            IntObject *di = dynamic_cast<IntObject*>(right.data[j]);
            if(bi->get_data() != di->get_data())
                count++;
            if(count == size)
                dif_obj.data[k] = data[i];
            delete di;
        }
        delete bi;
    }
 
    return dif_obj;
}
void set_t::show()
{
    IntObject *bi;
    StringObject *di;
    for(int i = 0; i < size; i++)
    {
        bi = dynamic_cast<IntObject*>(data[i]);
        if(bi == NULL)
        {
            di = dynamic_cast<StringObject*>(data[i]);
            if(di != NULL)
                cout << *di << endl;
        }
        else
            cout << *bi << endl;
    }
}
 
int menu()
{
    int choise;
    cout << endl;
    cout << endl;
    cout << "                         MENU" << endl;
    cout << "1. Display the array_1 of numbers" << endl;
    cout << "2. Display the array_2 of numbers" << endl;
    cout << "3. Display the array_1 of strings" << endl;
    cout << "4. Display the array_1 of strings" << endl;
    cout << "5. To add a number in many_1" << endl;
    cout << "6. To add a number in many_2" << endl;
    cout << "7. To add a string in many_1" << endl;
    cout << "8. To add a string in many_2" << endl;
    cout << "9. To remove a number from the set" << endl;
    cout << "10. To remove a string from the set" << endl;
    cout << "11. To combine two numerical sets" << endl;
    cout << "10. To combine two string set" << endl;
    cout << "11. Subtract the first from the second numerical sets" << endl;
    cout << "12. Subtract the first from the second string sets" << endl;
    cout << "13. Does the number in many" << endl;
    cout << "13. Does the string in many" << endl;
    cout << "14. Display the result set of numbers" << endl;
 
 
 
    cout << "7. Exit." << endl;
    cout << endl;
    cout << "Choose an option: ";
    cin >> choise;
 
    return choise;
}
 
int main()
{
    set_t intA,
          intB,
          intC,
          strA,
          strB,
          strC;
    int choise;
    while(choise != 20)
    {
        choise = menu();
        switch (choise)
        {
            case 1:
                {
                    intA.show();
                    break;
                }
            case 2:
                {
                    intB.show();
                    break;
                }
            case 3:
                {
                    strA.show();
                    break;
 
                }
            case 4:
                {
                    strB.show();
                    break;
                }
            case 5:
                {
                    int num;
                    cout << "Input number: ";
                    cin >> num;
                    IObject *p_1 = new IntObject(num);
                    IntObject *bi = dynamic_cast<IntObject*>(p_1);
                    intA.add(bi);
                //    delete p_1;
                 //   delete bi;
                    break;
                }
             case 6:
                {
                    int num;
                    cout << "Input number: ";
                    cin >> num;
                    IObject *p_2 = new IntObject(num);
                    IntObject *bi2 = dynamic_cast<IntObject*>(p_2);
                    intB.add(bi2);
                    break;
                }
             case 7:
                {
                    string str;
                    cout << "Input string: ";
                    cin >> str;
                    IObject *p_8 = new StringObject(str);
                    StringObject *bi8 = dynamic_cast<StringObject*>(p_8);
                    strA.add(bi8);
                    break;
                }
             case 9:
                {
                    int num;
                    cout << "Input number: ";
                    cin >> num;
                    IObject *p_3 = new IntObject(num);
                    IntObject *bi3 = dynamic_cast<IntObject*>(p_3);
                    intA.del(bi3);
                    break;
                }
             case 11:
                 {
                     intC = intA._union(intB);
                     break;
                 }
             case 8:
                {
                    intC.show();
                    break;
                }
 
        }
    }
 
    return 0;
}
Только вот, что я сделал меню, при добавлении и удалении все работает хорошо, но, к примеру, при объединении множества я формирую новый объект, когда я вывожу данные в том же методе, где произвожу объединение, то выводит нормально, а когда я в основной программе вывожу, то программа виснет.
Еще, я так и не разобрался как научить программу самостоятельно выбирать какой тип обрабатывать т.е. IntObject или StringObject, как то попытался реализовать это в методе show()
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void set_t::show()
{
    IntObject *bi;
    StringObject *di;
    for(int i = 0; i < size; i++)
    {
        bi = dynamic_cast<IntObject*>(data[i]);
        if(bi == NULL)
        {
            di = dynamic_cast<StringObject*>(data[i]);
            if(di != NULL)
                cout << *di << endl;
        }
        else
            cout << *bi << endl;
    }
}
Но думаю, что должен быть способ лучше, также так и не понял смысл функции less?

Добавлено через 1 час 11 минут
nmcf, проблема с объединением решена. нужно было ссылку на новый объект возвращать.
Что касательно автоматического определения типа, я правильно его в методе show() сделал, или можно было по-другому сделать?

Добавлено через 1 час 23 минуты
Почему не работает пересечение множеств? программа доходит до return и валится.
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
set_t& set_t::difference(const set_t &right)
{
    int k = 0;
    IntObject *bi;
    IntObject *di;
 
    for(int i = 0; i < size; i++)
    {
        bi = dynamic_cast<IntObject*>(data[i]);
        for(int j = 0; j < right.size; j++)
        {
            di = dynamic_cast<IntObject*>(right.data[j]);
            if(bi->get_data() == di->get_data())
                break;
            if(j == (right.size - 1))
                k++;
        }
    }
 
    set_t *dif_obj = new set_t;
    dif_obj->data = new IObject*[k];
    dif_obj->size = k;
    int c = 0;
 
    for(int i = 0; i < size; i++)
    {
        bi = dynamic_cast<IntObject*>(data[i]);
        for(int j = 0; j < right.size; j++)
        {
            di = dynamic_cast<IntObject*>(right.data[j]);
            if(bi->get_data() == di->get_data())
                break;
            if(j == (right.size - 1))
            {
                dif_obj->data[c++] = data[i];
            }
        }
    }
    dif_obj->show();
 
    return *dif_obj;
}
Добавлено через 3 часа 12 минут
Это тоже исправил. все работает, но еще не понятно как оптимальнее приводить типы. может кто подсказать?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
12.05.2016, 20:46
Цитата Сообщение от Nike1995 Посмотреть сообщение
Что касательно автоматического определения типа, я правильно его в методе show() сделал, или можно было по-другому сделать?
Проще создать виртуальный show() также как less(), я об этом уже писал.

Пересечение должно возвращать указатель, если ты создаёшь новое множество, иначе его потом не удалить.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
set_t * set_t::difference(const set_t &right)
{
    set_t *dif_obj = new set_t;
 
    for(int i = 0; i < size; i++)
        for(int j = 0; j < right.size; j++)
            if (typeid(*(data[i])) == typeid(*(right.data[j]))
            {
                if (typeid(*(data[i])) == typeid(StringObject))
                {
                    if (dynamic_cast<StringObject *>(data[i])->data == dynamic_cast<StringObject *>(right.data[j])->data) dif_obj->add(data[i]);
                }
                else if (typeid(*this) == typeid(IntObject)))
                {
                    if (dynamic_cast<IntObject *>(data[i])->data == dynamic_cast<IntObject *>(right.data[j])->data) dif_obj->add(data[i]);
                }
            }
 
    return dif_obj;
}
Но получается зависимость от типов, если добавить третий класс-потомок, то придётся дописывать под него.
Правильнее использовать полиморфизм по типу функции less(), также можно equal() сделать, чтобы сравнивать на равенство и т. д.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.05.2016, 20:46

Передача объектов дочерних классов через массив объектов родительского класса в функцию
Здравствуйте. Возможно, вопрос больше относится к теории ООП, но все же я не решился задавать его в теме теории ООП, так как он кажется мне...

Массив объектов одного класса как поле другого класса
Доброе время суток. Мне тут в универе задали лабу, нужно создать класс полем которого будет массив объектов класса из предыдущей лабы и в...

Массив объектов класса. Печать строк-членов класса.
подскажите, как распечатать строки? #include &quot;myString.h&quot; #include &lt;iostream&gt; #define stop __asm nop void main() { ...

Массив объектов класса как член другого класса
Здравствуйте. У меня тут возникла проблемка #include &quot;main.h&quot; class player { public: player(); player(char*); ...

Как обратится к обьекту класса, являющегося наследником абстрактного класса
Здравствуйте! У меня есть 4 класса: один виртуальный, следующие 2 - наследуют виртуальный класс и последний класс содержит указатель на...


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

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи. . . .
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru