내부에 구형 및 캡슐의 객체가있는 3D 세계를 모델링하려고합니다. 모양 클래스가 기본 클래스이고 구체 클래스와 캡슐 클래스가 기본 클래스에서 상속받는 방식으로 모델링했습니다 (올바르게 구현 한 경우 완벽하게 가상 클래스입니다).기본 클래스를 매개 변수로 파생 클래스로 변환 할 수 있도록 함수 오버로드
class Shape
{
protected:
COLORREF color;
public:
virtual COLORREF getColor() =0;
};
class Capsule: public Shape
{
private:
Point start;
Direction direction;
int dist, r;
//Color color;
//COLORREF color;
public:
Capsule(Point start, Direction direction, int inputdist, int inputr, COLORREF inputcolor);
COLORREF getColor();
};
class Sphere : public Shape
{
private:
int r;
Point p;
//Color color;
//COLORREF color;
public:
Sphere(int x, int y, int z , int r, COLORREF inputcolor) ;
COLORREF getColor();
Point getpoint();
int getradius();
};
그렇다면 Sphere 객체에 대한 포인터 또는 Capsule 객체에 대한 포인터를 취하는 다른 클래스에 함수가 있습니다.
bool Collideswith(Sphere *s);
bool Collideswith(Capsule *c);
하지만 위의 기능 중 하나를 강제로 싶습니다은 내가
Shape *myshape = new Sphere(0,0,0,4, RGB(0,0,0));
if(myRay.Collideswith(myshape)) { blah... }
호출 할 때 호출하지만 문제는 할 그 Collideswith는 캡슐에 대한 포인터에 걸리거나 포인터 구체에 있기 때문에 지금 당장이 포인터를 내가 가리키는 곳으로 가져 가려하지 않을 것입니다.이 포인터는 도형에 대한 포인터입니다.
셰이프 포인터를 전달한다는 사실을 바꿀 수는 없지만 Collideswith() 함수가 셰이프 포인터를 가져 오는 방법을 알아야합니다. (아마도 모양 포인터를 취하는 오버로드 된 함수를 작성하여 모양이 캡슐인지 또는 구형인지 어떻게 알 수 있습니까?)
모든 제안은 정말 감사하겠습니다.
class Shape {
// ...
virtual bool CollidesWith()=0;
};
를 그리고 각 사용자의 서브 클래스 중 하나를 구현 : 감사
Collideswith() 메서드가있는 다른 클래스의 코드를 변경할 수 있습니까? 또는 Shape 관련 클래스 만 수정할 수 있다고 가정해야합니까? – yaobin