Я хочу иметь список объектов, связанных их базовым классом. Поэтому у меня будет класс, который управляет всеми различными вкусами объектов, но равномерно хранится в форме базового класса. Я хочу иметь возможность обрабатывать тестовое столкновение между двумя объектами, одним из которых является сфера, а другой - с кубом. Я бы назвал функцию вроде so sphere-> collisionTest (куб). Используя полиморфизм, я могу вызвать метод collisionTest и перейти к соответствующему методу в классе сфер, но мне нужен способ идентифицировать/переопределять метод collisionTest в классе сфер. Параметр, переопределяющий сферу. CollisionTest (сфера) или sphere.collisionTest (куб). Вот пример кода, который я пробовал. Здесь, когда я вызываю метод collisionTest (object-> getObject()), я считаю, что должен получить объект куба, а затем он переопределит параметр и вызовет метод collisionTest (объект Cuboid *). Вместо этого он вызывает тот же объект collisionTest (объект Geom *).Обращение с объектами
int main()
{
Geom *geomHandler1;// = new Geom();
Geom *geomHandler2;// = new Geom();
Sphere *sphereGeom = new Sphere();
Cuboid *cuboidGeom = new Cuboid();
geomHandler1 = (Geom*)sphereGeom;
geomHandler2 = (Geom*)cuboidGeom;
geomHandler1->collisionTest(geomHandler2);
return 0;
}
#include "Sphere.h"
void Sphere::collisionTest(Geom *object)
{
collisionTest(object->getObject());
}
void Sphere::collisionTest(Cuboid *object)
{
}
Sphere* Sphere::getObject()
{
Sphere *husk = new Sphere();
return husk;
}
#include "Cuboid.h"
void Cuboid::collisionTest(Geom *object)
{
}
void Cuboid::collisionTest(Sphere *object)
{
}
Cuboid* Cuboid::getObject()
{
Cuboid *husk = new Cuboid();
return husk;
}
Я не думаю, что вы можете это сделать, потому что только метод collisionTest, который принимает объект Geom, можно переопределить. Ваш объект Geom не знает, что такое столкновение с кубом, и поэтому его не называют. – VoidStar