Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Kreikten
0 / 0 / 0
Регистрация: 12.01.2018
Сообщений: 9
1

Динамическое создание экземпляров класса

13.07.2018, 10:48. Просмотров 981. Ответов 17

Здравствуйте! Имеется класс TUnits и родительский класс TGameObjects, необходимо, чтобы при нажатии кнопки создавался новый экземпляр класса с именем unit1,unit2,unit3... Как это реализовать? Пишу на Embarcadero XE8
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.07.2018, 10:48
Ответы с готовыми решениями:

Объявление класса, создание экземпляров класса. Наследование классов
Вообщем начал делать программу:"Создать класс Матрицы, обеспечивающего размещение матрицы...

Динамическое создание компонентов по наименованию класса
Всем добрый день! Есть строковое наименование класса. Например: var sClassName : string;...

Заполнение экземпляров класса
Доброго времени суток. Помогите пожалуйста разобраться. Имеется вот что: Описываем класс Студ в...

Копирование экземпляров класса
Есть массив экземпляров некоторого класса. Мне нужно скопировать его в другой массив или тот же...

Одновременное сохранение двух экземпляров класса
Здравствуйте, дорогие форумчане. Если в двух словах, программа представляет собой модифицированную...

17
Human_foot
129 / 85 / 31
Регистрация: 27.06.2018
Сообщений: 222
13.07.2018, 11:15 2
Лучший ответ Сообщение было отмечено Kreikten как решение

Решение

Что значит с именем? Имя переменной такое должно быть? Если да, то так не надо.

Delphi
1
2
3
4
5
6
7
8
unit: array of TUnits; //глобально
...
буттон.клик
begin
  k := length(unit);
  setlength(unit, k+1);
  unit[k] := TUnits.Сreate(...
end;
В нулевой позиции 1-ый экземпляр
в первой - 2-ой
во второй - 3-ий
...


Вместо массива можно абстрактный TList или TObjectList
1
Kreikten
0 / 0 / 0
Регистрация: 12.01.2018
Сообщений: 9
13.07.2018, 11:20  [ТС] 3
Да, именно то что нужно. Спасибо за ответ!
0
D1973
Модератор
5499 / 3555 / 1602
Регистрация: 21.01.2014
Сообщений: 15,031
Записей в блоге: 3
Завершенные тесты: 1
13.07.2018, 11:21 4
Kreikten, если в Вашем классе описано свойство Name, подразумевающее имя объекта - экземпляра класса - то конечно можно.
0
13.07.2018, 11:21
Human_foot
129 / 85 / 31
Регистрация: 27.06.2018
Сообщений: 222
13.07.2018, 11:25 5
Только имя unit лучше не использовать, а то оно зарезервировано. Лучше что-то типа MyUnit
0
krapotkin
4095 / 3413 / 1157
Регистрация: 14.04.2014
Сообщений: 16,352
Записей в блоге: 17
13.07.2018, 23:03 6
лучше не юзать массивы
не для этого они
гораздо удобнее
TObjectList

Delphi
1
2
3
4
List := TObjectList.Create(true);
 
u := TMyUnit.Create;
List.Add(u);
0
northener
14.07.2018, 02:53
  #7

Не по теме:

Цитата Сообщение от krapotkin Посмотреть сообщение
лучше не юзать массивы
не для этого они
При неозвученной задаче не стоит говорить о том что лучше. Массивы или списки.

0
krapotkin
4095 / 3413 / 1157
Регистрация: 14.04.2014
Сообщений: 16,352
Записей в блоге: 17
14.07.2018, 16:51 8
у меня дар))
по названиям классов вижу )))
списки
точно
лучше
0
snake32
1862 / 1174 / 205
Регистрация: 26.02.2009
Сообщений: 4,463
Записей в блоге: 5
15.07.2018, 13:57 9
krapotkin, а ещё лучше типизированные списки
Delphi
1
2
3
4
uses
  Generics.Collections;
type
  TUnits = TObjectList<TUnits>;

Не по теме:

ЗЫ: по той же причине - дар )))

0
krapotkin
4095 / 3413 / 1157
Регистрация: 14.04.2014
Сообщений: 16,352
Записей в блоге: 17
15.07.2018, 15:00 10
snake32, не то слово как лучше ))
0
northener
пофигист широкого профиля
3637 / 2441 / 660
Регистрация: 15.07.2013
Сообщений: 14,546
16.07.2018, 02:19 11
Дар, то дар. не спорю. И к snake32 это относится. Но автор топика пока молчит.
0
Arcor
18.07.2018, 22:59
  #12

Не по теме:

а почему не стек и не очередь?) а вдруг удобнее будет по постановке реальной(неозвученной) задачи)))))

0
northener
19.07.2018, 02:37
  #13

Не по теме:

Цитата Сообщение от Arcor Посмотреть сообщение
а почему не стек и не очередь?)
А это уже высшая математика :)

0
snake32
19.07.2018, 13:42
  #14

Не по теме:

Цитата Сообщение от Arcor Посмотреть сообщение
а почему не стек и не очередь?)
Выбирал я и стэк и очередь, но во всех случаях в процессе рефракторинга в итоге менял на старый добрый список.
Может мне так с задачами "везёт", хз

0
krapotkin
19.07.2018, 14:10
  #15

Не по теме:

! вот почему-то за все свои 20+ лет практики тоже ни разу не пришлось использовать в реальности )))

0
Arcor
5159 / 2017 / 432
Регистрация: 20.11.2009
Сообщений: 6,674
Записей в блоге: 1
19.07.2018, 14:18 16
Цитата Сообщение от krapotkin Посмотреть сообщение
! вот почему-то за все свои 20+ лет практики тоже ни разу не пришлось использовать в реальности )))
а мне вот недавно пришлось использовать реальную очередь, причем еще на СИ да еще и на МК! Пришлось самому весь механизм создавать. Списком или массивом не получилась бы вся эффективность! А так тупое "проталкивание" данных из накопленного буффера.

А стеком пользовался, когда писал один анализатор)))
0
northener
20.07.2018, 01:26
  #17

Не по теме:

Arcor, ну для МК я бы и не стал думать о списках. Правда я и о СИ не стал бы думать. Только ассемблер! :)

0
Arcor
21.07.2018, 11:10     Динамическое создание экземпляров класса
  #18

Не по теме:

Цитата Сообщение от northener Посмотреть сообщение
Правда я и о СИ не стал бы думать. Только ассемблер!
я над этим работаю! :yes:

0
21.07.2018, 11:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.07.2018, 11:10
Привет! Вот еще темы с ответами:

Общая переменная для двух экземпляров класса
Здравствуйте. есть класс. создаю несколько экземпляров класса. как в описании класса создать для...

Создание класса с унаследованными методами класса-предка
Подскажите, как создать класс с унаследованными методами класса-предка?

динамическое создание
напишите приложение в котором, при щелчке по форме мышью, появляется панель с заголовком,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.