基本クラスによってリンクされているオブジェクトのリストが必要です。したがって、オブジェクトのさまざまなフレーバーをすべて管理するが、基本クラスの形式で一様に格納されるクラスを作成します。球体と立方体の 2 つのオブジェクト間のテスト衝突を処理できるようにしたいと考えています。sphere->collisionTest(cube) のような関数を呼び出すと思います。ポリモーフィズムを使用すると、collisionTest メソッドを呼び出すことができ、球クラスの適切なメソッドに移動しますが、球クラス内のどの collisionTest メソッドを識別/オーバーライドする方法が必要です。sphere.collisionTest(sphere) または sphere.collisionTest(cube) をオーバーライドするパラメーター。これが私が試したコードの例です。ここで、collisionTest(object-> getObject()) メソッド 立方体オブジェクトを取得する必要があると思います。その後、パラメーターをオーバーライドして、collisionTest(Cuboid *object) メソッドを呼び出します。代わりに、同じ collisionTest(Geom *object) を呼び出します。
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;
}