Можно ли как-то в c++ узнать принадлежность объекта классу? У меня есть (пока нет но, прежде чем начать нужно определится с такими вещами) массив объектов игры. Это разные классы, которые наследуют от одного (Object, например). То есть все они являются Object.
Но как мне понимать, что элемент этого массива является не только Object в общем, но и, например, игроком или врагом или стеной или еще чем-то?
В js я бы написал:
if (objects[i] instanceof Wall) { ... }
Но как такое сделать с С++? При этом без костылей.
Или может быть я не правильно понимаю как такие вещи делаются в С++? Если да, но как это организовывают?

21 Авг 2019 в 06:59
200 +1
0
Ответы
1

В C++ можно использовать оператор dynamic_cast для проверки принадлежности объекта определенному классу. Например, если у вас есть массив указателей на объекты класса Object, и вам нужно проверить, является ли объект игроком, вы можете сделать следующее:

#include <iostream>
class Object {
public:
virtual ~Object() {}
};
class Player : public Object {
};
int main() {
Object* objects[3];
objects[0] = new Object();
objects[1] = new Player();
objects[2] = new Object();
for (int i = 0; i < 3; i++) {
Player* player = dynamic_cast<Player*>(objects[i]);
if (player) {
std::cout << "Object " << i << " is a Player." << std::endl;
} else {
std::cout << "Object " << i << " is not a Player." << std::endl;
}
}
for (int i = 0; i < 3; i++) {
delete objects[i];
}
return 0;
}

Этот код использует оператор dynamic_cast для попытки преобразования объекта к типу Player. Если объект является игроком, результат будет указателем на объект класса Player, который можно проверить на ненулевое значение. Если объект не является игроком, результат будет nullptr.

Учтите, что при использовании dynamic_cast ваш базовый класс (Object) должен иметь хотя бы один виртуальный метод, иначе dynamic_cast не будет работать.

20 Апр в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 493 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир