Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.07.2019, 23:35   #1
diomed16
Пользователь
 
Регистрация: 27.09.2012
Сообщений: 37
По умолчанию Обращение к объекту

Вот допустим у меня есть класс Bullet. Я насоздавал кучу объектов.

Код:
  std::list<Bullet*> entities;
  Bullet *a = new Bullet(x,.y);
  entities.push_back(a);
Я использую box2d, и здесь я прогоняю цикл в поиске body с именем bullet. Цикл его находит, и я могу наложить спрайт на найденный body. Вот так в принципе работает, если я спрайт создал глобально. Но я хотел бы обратиться для этого к объекту класса. Мне может не только спрайт понадобится, например, я в этом цикле нашёл объект, который сталкивается и нужно изменить какую-нибудь переменную.
Код:
  for (b2Body* it = World.GetBodyList(); it != 0; it = it->GetNext())
        {	if (it->GetUserData()=="player")
			{
				
				window.draw(it->sPlayer);
			}		
               if (it->GetUserData()=="bullet")
			{
				
				window.draw(it->sBullet);
			}
       }
В общем, как мне обратиться к объекту, который находится в неизвестном месте списка? Второй for видимо не вариант, потому что этих самых body всегда больше, чем список с объектами bullet .
diomed16 вне форума Ответить с цитированием
Старый 22.07.2019, 23:40   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от diomed16 Посмотреть сообщение
как мне обратиться к объекту, который находится в неизвестном месте списка?
Найти объект.
waleri вне форума Ответить с цитированием
Старый 22.07.2019, 23:45   #3
diomed16
Пользователь
 
Регистрация: 27.09.2012
Сообщений: 37
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Найти объект.
Получается, я в классе Bullet создаю объект типа b2Body. Вот этот объект находится через цикл. Но найдя этот объект, я не знаю, как теперь найти к какому объекту класса Bullet этот объект принадлежал.
diomed16 вне форума Ответить с цитированием
Старый 23.07.2019, 00:03   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Читайте про полиморфизм и виртуальные методы.
waleri вне форума Ответить с цитированием
Старый 23.07.2019, 19:36   #5
CppLinux345
Пользователь
 
Регистрация: 26.09.2018
Сообщений: 23
По умолчанию

RTTI + виртуальные функции в помощь.
if (typeid(имя_объекта) == typeid(имя_класса))
CppLinux345 вне форума Ответить с цитированием
Старый 25.07.2019, 10:19   #6
diomed16
Пользователь
 
Регистрация: 27.09.2012
Сообщений: 37
По умолчанию

Цитата:
Сообщение от CppLinux345 Посмотреть сообщение
RTTI + виртуальные функции в помощь.
if (typeid(имя_объекта) == typeid(имя_класса))
Спасибо за информацию. Однако, тип объекта я знаю и знаю, к какому классу он принадлежит.
Я не знаю имени объекта. Потому что нашёл другой объект, находящийся внутри этого объекта. Не знаю, в каком объекте находится этот объект, который мной был по имени найден.
Может я слишком путано объясняю, но как есть. Но неужели никто не создаёт объекты внутри других объектов?
diomed16 вне форума Ответить с цитированием
Старый 26.07.2019, 18:19   #7
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от diomed16 Посмотреть сообщение
Спасибо за информацию. Однако, тип объекта я знаю и знаю, к какому классу он принадлежит.
Я не знаю имени объекта. Потому что нашёл другой объект, находящийся внутри этого объекта. Не знаю, в каком объекте находится этот объект, который мной был по имени найден.
Может я слишком путано объясняю, но как есть. Но неужели никто не создаёт объекты внутри других объектов?
конечно создают.
никто не занимается такой херней - не называет два разных объекта Васьками.
что бы потом было не понятно, какой именно Васька имеется ввиду.

даже более того: никто вообще не пытается давать объектам имена.
за искл. особых случаев, когда того требует предметная область.
_Bers вне форума Ответить с цитированием
Старый 27.07.2019, 08:58   #8
diomed16
Пользователь
 
Регистрация: 27.09.2012
Сообщений: 37
По умолчанию

Мне удалось разобраться, описать тут не смогу, слишком много кода.
Как закрыть тему тоже не знаю.
diomed16 вне форума Ответить с цитированием
Старый 27.07.2019, 16:51   #9
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от diomed16 Посмотреть сообщение
слишком много кода
вложения или gist.github.com
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обращение к объекту как к массиву [TStrings] cyberdev Компоненты Delphi 4 04.03.2018 20:49
Обращение к объекту sameuser Общие вопросы по Java, Java SE, Kotlin 2 11.09.2017 05:39
Обращение к выделенному объекту Алексей_2012 Общие вопросы Delphi 11 14.05.2013 09:01
Обращение к объекту по имени Kazak009 C++ Builder 3 05.05.2012 08:37
обращение к объекту из другой формы Darlee Общие вопросы Delphi 4 11.06.2011 14:27