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

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

10.05.2016, 19:00. Показов 5383. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат» Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru