1 / 7 / 3
Регистрация: 20.12.2011
Сообщений: 58
1

Возможно ли объекты и потомки этих объектов поместить в один и тот же динамический массив?

20.05.2014, 17:29. Показов 2869. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
У меня есть объекты, очень сложные объекты. Они постоянно относятся то одному то другому массива, они постоянно выполняют большое количество операций.Але мне нужно создать два класса нащадки.И все Операции продублировать ... или можна как-то поместить их в один массив с объектами родительского класса или придется делать это по новой?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.05.2014, 17:29
Ответы с готовыми решениями:

Как создать класс контейнер-динамический массив и поместить туда объекты других классов?
Какой тип массива использовать тип базового класса или наследников?

Как объявить массив объектов одного класса в другом классе, а затем поместить в него объекты?
Как объявить массив объектов одного класса в другом классе, а затем поместить в него объекты?

Динамический массив при наследовании, элементами которого являются объекты класса наследника динамический массив
Попробовал создать динамический массив, у которого элементы - объекты класса динамический массив,...

Удалить все объекты и создать объекты - потомки
Как сделать клоны объекта в другом объекте? Использую метод Instantiate Есть метод public...

6
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
20.05.2014, 18:03 2
Понятнее объясни. С примерами.
0
1 / 7 / 3
Регистрация: 20.12.2011
Сообщений: 58
20.05.2014, 18:11  [ТС] 3
у меня есть масив
C++
1
skydiver **mas=new skydiver*[40];
добавлять новий елемент в него
C++
1
2
3
 mas[0]=new skydiver("Михайло",200,500,0,0);all++;
mas[1]=new skydiver("Олександр",400,500,0,0);all++;
mas[2]=new skydiver("Тимур",700,280,400,0);all++;
Клас обэктов очень сложний
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
#pragma once
#include "StdAfx.h"             
 
class skydiver
    {
    friend class land;
    private:
        int n;                  //Номер
        POINT lastpoz;          //Координати останньої позиції для затирання
        POINT poz;              //Координати позиції
        POINT v;                //Вектор руху (для таймера)
        char he_is[20];         //Ім'я
        bool select;            //Індекатор виділення
    public:
        //Конструктор з параметрами
        skydiver (char *_he_is,int x,int y,int xv,int yv)
        {
            strcpy(this->he_is,_he_is);
            poz.x=lastpoz.x=x;
            poz.y=lastpoz.y=y;
            v.x=xv;
            v.y=yv;
            select=false;
        }
        skydiver()
        {   
            char *_he_is="Новий";
            strcpy(this->he_is,_he_is);
            poz.x=(400+rand () % 600);
            poz.y=(280+rand () % 50);
            v.x=-3;
            v.y=3;
            select=false;
        }
        
        //Методи надання даних
        char* getname()             {return this->he_is;}
        bool sel()                  {return this->select;}
        int getpozx()               {return this->poz.x;}
        int getpozy()               {return this->poz.y;}
        void givepoz(int x,int y)   {lastpoz.x=poz.x; poz.x=x; lastpoz.y=poz.y; poz.y=y;}
        //Mетод інверсії виділення
        void selnow()           {if (select==0) select=1; else select=0;}
        //Підрівняти до краю екрана
        void dobetter(int a)    {lastpoz.y=poz.y; poz.y=a;}
        //Відміна виділення
        void selfalse()         {select=0;}
        //Методи переміщення
        void left() {lastpoz.x=poz.x; poz.x-=4;}
        void right(){lastpoz.x=poz.x; poz.x+=4;}
        void up()   {lastpoz.y=poz.y; poz.y-=4;}
        void down() {lastpoz.y=poz.y; poz.y+=4;}
        void graw(int bottom) 
            {   
                lastpoz.x=poz.x;
                lastpoz.y=poz.y;
                poz.x+=rand () % 4;
                poz.y+=4; 
            }
        //Метод який визначає чи знаходиться курсор на обєкті
        bool inme (int x,int y)
        {
            if ((x>=poz.x)&&(x<=poz.x+100)&&(y>=poz.y)&&(y<=poz.y+150)) return true;
            else return false;
        }
        //Метод зображення обєкту//
        void draw(HDC hdc,HBITMAP jetpack1,HBITMAP jetpack2,
            HBITMAP _jetpack1,HBITMAP _jetpack2,HBITMAP skydiver_new,bool a,bool r_or_l)
        {
        HDC hdcMem=CreateCompatibleDC(hdc);
        // Виділення парашутиста проявляється у тому що у нього з'являється реактивний ранець
        // це цілком виправдовує той факт, що парашутис отримує можливість керувати траекторією
        // і навіть летіти в гору.
        HPEN delpen=CreatePen(PS_SOLID,1,RGB(255,255,255));
        HBRUSH delbrush = CreateSolidBrush (RGB(255,255,255));
        (HPEN)SelectObject(hdc,delpen);
        (HBRUSH)SelectObject(hdc,delbrush);
        Rectangle(hdc,lastpoz.x-4,lastpoz.y-30,lastpoz.x+108,lastpoz.y+154);        ///Очищення зайвого
        
        TextOutA(hdc,poz.x+10,poz.y-22,LPCSTR(this->getname()),strlen(this->getname()));
        if (select){
            if(r_or_l)
                if (a){
                SelectObject(hdcMem,jetpack1);
                BitBlt(hdc,poz.x,poz.y+1,100,150,hdcMem,0,0,SRCCOPY);
                }   
                else{
                SelectObject(hdcMem,jetpack2);
                BitBlt(hdc,poz.x,poz.y-1,100,150,hdcMem,0,0,SRCCOPY);
                }               
        else
                if (a){
                SelectObject(hdcMem,_jetpack1);
                BitBlt(hdc,poz.x,poz.y+1,100,150,hdcMem,0,0,SRCCOPY);
                }   
                else{
                SelectObject(hdcMem,_jetpack2);
                BitBlt(hdc,poz.x,poz.y-1,100,150,hdcMem,0,0,SRCCOPY);
                }
        TextOutA(hdc,poz.x,poz.y,LPCSTR("(Виділений)"),11);
        }
        else{   
        SelectObject(hdcMem,skydiver_new);
        BitBlt(hdc,poz.x,poz.y+1,100,150,hdcMem,0,0,SRCCOPY);       
        }
        DeleteDC(hdcMem);
        };
        
    };
Я хочу создать два класса нащадки и добавить в етот же масив
0
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
20.05.2014, 18:23 4
Inferiym, Страуструп бы не одобрил. У тебя, просто, "спагетти код", как его называют.

Опиши задачу в отрыве от существующего кода. Только опиши на каком то одном языке или русском, или украинском, не надо их перемешивать, у вас в коде каши достаточно.
0
Модератор
Эксперт С++
13727 / 10923 / 6479
Регистрация: 18.12.2011
Сообщений: 29,155
20.05.2014, 18:41 5
Лучший ответ Сообщение было отмечено Inferiym как решение

Решение

Поскольку у вас имеется массив указателей на базовый класс,
то их можно инициализировать адресами Производных классов.
Только имейте ввиду, что из производных классов вызывать можно будет
только виртуальные методы (т.е. в базовом классе надо их предусмотреть).
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class skydiver
{
 ...
virtual void draw(.... // метод базового класса
};
class great_skydiver:public skydiver
{
 ...
    virtual void draw(.... // метод производного класса
}
...
mas[0]=new skydiver("Михайло",200,500,0,0);all++;
mas[1]=new great_skydiver("Олександр",400,500,0,0);all++;
mas[2]=new great_skydiver("Тимур",700,280,400,0);all++;
mas[0]->draw();// Вызов из базового класса 
mas[1]->draw(); // Вызов из производного класса
mas[2]->draw(); // Вызов из производного класса
1
1 / 7 / 3
Регистрация: 20.12.2011
Сообщений: 58
20.05.2014, 20:44  [ТС] 6
Хорошо спасибо .. но э одно но .. При определенных обстоятельствах, я эти объекты передаю в обычный массив! Его заменить динамический? ... Но его 4 дня настраивал ...
0
Модератор
Эксперт С++
13727 / 10923 / 6479
Регистрация: 18.12.2011
Сообщений: 29,155
20.05.2014, 21:04 7
Лучший ответ Сообщение было отмечено Inferiym как решение

Решение

Копировать производный объект в базовый без явного приведения типа запрещено,
а присваивать указатель сам Бог велел!
1
20.05.2014, 21:04
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.05.2014, 21:04
Помогаю со студенческими работами здесь

Динамический массив ,элементами которого являются объекты класса динамический массив
Доброго времени суток, захотел создать динамический массив ,элементами которого являются объекты...

Поместить один и тот же элемент в разные ячейки Grid программно
Дело в том, что мне необходимо закрасить Grid четырьмя разными цветами и для этого я решил...

Функция создает объекты и указателями на них заполняет массив. При выходе из функции вызываются деструкторы объектов. Как сохранить объекты?
Вопрос прост: как при выходе из функции сохранить объекты, которые были созданы в данной функции...

Где и как создать массив объектов, чтобы можно было получить доступ к методам этих объектов?
Задача: &quot;в win form кликаю на кнопку (button) и в этот момент в одном из массивов экземпляров...

Как трансформировать один массив объектов в другой массив объектов
Ниже приведен код, что трансформирует один массив в другой. Можно ли сделать тоже самое, но без $...

Поместить объекты в массив для обращения по индексу
На форме имеются 10 компонетов одного типа Tpanel. Как мне поместить их в массив, чтобы обращаться...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

Новые блоги и статьи
Как создать игру "Танчики" на Unity3d и C#
InfoMaster 14.01.2025
Разработка игр – это увлекательный процесс, сочетающий в себе творчество и технические навыки. В этой статье мы рассмотрим создание классической игры "Танчики" с использованием Unity3D и языка. . .
Организую платный онлайн микро-курс по доработке Android-клиента Telegram
_Ivana 14.01.2025
Официальная версия и распространенные форки не полностью устраивают? Сделай свою кастомную версию клиента! 4 занятия по 2 часа (2 недели пн, ср 19:00-21:00 по Москве). Первое вводное занятие. . .
Как создать приложение для фитнеса для iOS/iPhone на Kotlin
InfoMaster 14.01.2025
Создание собственного фитнес-приложения — это не только захватывающий, но и полезный процесс, ведь оно может стать вашим верным помощником на пути к здоровому и активному образу жизни. В современных. . .
Как создать приложение магазина для iOS/iPhone на Swift
InfoMaster 14.01.2025
Введение в разработку iOS-приложений Разработка приложений для iPhone и других устройств на базе iOS открывает огромные возможности для создания инновационных мобильных решений. В данной статье мы. . .
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта Gowin Eda и снимок. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
UserScript для подсветки кнопок языков программировани­­­­я в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения: / / ==UserScript== / / @name CF_DefaultLangSelect / / . . .
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
Как создать нейросеть для генерации картинок на Python
InfoMaster 12.01.2025
Генерация изображений с помощью искусственных нейронных сетей стала одним из наиболее захватывающих направлений в области компьютерного зрения и машинного обучения. В этой статье мы рассмотрим. . .
Создание нейросети для генерации текста на Python
InfoMaster 12.01.2025
Нейросети, или искусственные нейронные сети, представляют собой модели машинного обучения, вдохновленные работой человеческого мозга. Они состоят из множества взаимосвязанных узлов, или "нейронов",. . .
Как создать нейросеть распознавания изображений на Python
InfoMaster 12.01.2025
Введение в распознавание изображений с помощью нейросетей Распознавание изображений с помощью нейронных сетей стало одним из самых впечатляющих достижений в области искусственного интеллекта. Эта. . .
Основы искуственного интеллекта
InfoMaster 12.01.2025
Искусственный интеллект (ИИ) представляет собой одну из наиболее динамично развивающихся областей современной науки и технологий. В широком смысле под искусственным интеллектом понимается способность. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru